IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity XCode自动化打包以及 Unity2020 接入 iossdk相关配置 -> 正文阅读

[游戏开发]Unity XCode自动化打包以及 Unity2020 接入 iossdk相关配置

unity xcode打包自动化,在unity打完xcode包以后,unity自己回调带有【PostProcessBuild】的方法或者脚本,从而读取到xcode配置。

特别注意:此脚本不用挂 monobehaviour ,只需要把脚本放入Assets/Editor/下即可!!!

把你的写的.mm 和.h 文件放入 Plugin/ios下面,这个是和oc交互需要用到的,他需要在ios模式下交互

具体的api不解释了,去查unity官网文档即可。

就根据unity2020接入ios sdk来说

xcode编译基于Unity-iPhone和UnityFramework(Unity2019以后出现),所以在接入iossdk的是时候,我们只需要配置 UnityFramework的大部分环境和Unity-IPhone 里的少量环境。

咱们先说步骤,具体操作我会在后面贴图。

我们需要配置一下几步

????????1.配置相关证书,双击给到你的p12文件,输入密码,把他安装到mac本地,因为这个文件有你的teamid等相关信息,如果本地以前有过安装文件的话,点开你的应用程序,点击秘钥,把以前的.p12删除,如果找不到秘钥,点击你的.p12文件这样自己会弹出秘钥,安装完.p12文件以后,接下来我们就可以配置证书,证书会有两种格式 dev/dis,这个和你发布的时候有关,看你想要用那种方式去发布。

2.添加frameworks和静态库到buildphase里(这些静态库ios提供的和你自己要导入的sdk相关的framework和.a文件),除了内置的ios库以及framework以外,sdk自己的库和framework文件你需要添加到工程里,点击左侧工程,进入你的目录,点击你的要添加的文件夹通过AddFIles添加,需要勾选if needs(或者直接手动拖到你的左侧列表里,他会给你提供选择),这些库和文件只需要添加到unityframework里编译,unity-iphone不用添加(如果两份添加的话可能会重复,编译xcode的时候会报错),你把sdk相关文件拖进去以后,他会把文件都自动添加上,如果没有添加上的话记得把你的framework和.a文件手动拖进入(sdk相关文件)。

3.

? ? ? ? 1.配置buildSetting 搜索bitcode ---> NO ,如果编译过程中报错的话,那就把unity-iphone和unityframework里的设置一下。

? ? ? ? 2.在otherlink里边去添加 -ObjC,这是支持oc代码的,其他应该还需要添加,这个按照SDK文档来就行了,添加在UnityFramework就行

? ? ? ? 3.就这些应该也不用设置什么了,如果有需要的话查看你的sdk文档

4.? 配置相关资源,在unityframework里把你的sdk里边的资源都拖进来,比如.bundle.cfg.dat等资源类型的文件都添加complie sources里,这个添加unityframework里就好,这个需要你自己手动添加,如果不添加资源的话在编译的时候会报错,因为你在把SDK文件的相关目录拖进入的时候,他已经在UnityiPhone ---?buildphase里添加了,所以不用再次添加,只需要在unityframework里把资源放入就好。

配置好以上资源以后,就可以编译了。

一些常用报错的解决方案

? ? ? ? 1.obj_class_xx 这个是找不到类,这个时候就需要具体问题具体分析,看看是哪个文件里边找不到相关的类,一般情况下就是sdk文件缺少引入framework和缺少添加ios内置framework和静态库

????????2.device_left_space 这种报错就是没有空间了,清理一下mac空间就好,或者找到archive目录,直接清理一下,他在xcode里边是很占内存的,能省出一大部分空间

????????3.与bitcode相关的报错就是 把bitcode设置为no就好

? ? ? ? 4.不要去替换unityframeworks的目录,因为他是unity自己生成的,如果复制粘贴的话可能会重复或者找不到plist不要去替换plist

? ? ? ? 5.library not found xxx,这个就是没有在library search path里添加相关文件的目录,给他们添加一下就好。

? ? ? ? 6.xxx.h not found 这种就是.h文件没有找到 ,这就情况就是需要在header search path 里把这个文件的根目录添加上就行,如果还找不到那就在添加一层

? ? ? ? 7.xxxframework not found,这个是库没有找到,那就在framework search path里把库的路径添加上就好

? ? ? ? 8.search path 在buildSetting里,搜索search path就好

? ? ? ? 9.如果连接上手机安装到手机上的话,报错那就是手机没有允许权限,重新插入一下允许权限就好

5.在sdk初始化和需要调用一些接口的时候会在unityAppController.mm 文件里,这个时候根据文档直接调用就行,如果崩溃的话及时联系第三方或者相关技术人员

6.配置plist 这个里边就是配置一些权限,拍照,录音啥的,手机定位,以及屏幕旋转,微信,支付宝各种支付,具体的话按照文档来吧。

最后一步直接出包就行,如果还有其他报错或者说没有配置的地方,导致没有编译过去,及时联系sdk相关技术人员。

在这里设置包名,teamid,证书

?,最后提供一个范例,仅供参考。

#if UNITY_IOS || UNITY_EDITOR

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


/// <summary>
/// 此脚本作为范例,不做具体配置,仅提供参考!!!
/// </summary>
[PostProcessBuild]
public class OnBuildPostprocess
{
? ??
? ??
? ? public static void BuildPostProcess(BuildTarget target, string path)
? ? {
? ? ? ? if (!File.Exists(path))
? ? ? ? {
? ? ? ? ? ? Debug.LogError("不存在此目录文件,Unity打包失败");?
? ? ? ? ? ? return;
? ? ? ? }


? ? ? ? if (target == BuildTarget.iOS)
? ? ? ? {
? ? ? ? ? ? InitData(path);
? ? ? ? }

? ? }

? ? internal static void InitData(string path)
? ? {
? ? ? ??
? ? ? ? // 读取到unity打包后生成的xcode文件
? ? ? ? PBXProject pro = new PBXProject();
? ? ? ? string file = File.ReadAllText(path);
? ? ? ? pro.ReadFromFile(file);

? ? ? ? // 1.获取到unityframework配置 2.获取到unity-iphone 配置
? ? ? ? string unityframework = ?pro.GetUnityFrameworkTargetGuid();
? ? ? ? string main = pro.GetUnityMainTargetGuid();

? ??
? ? }

? ? /// <summary>
? ? /// 添加 frameworks以及静态库
? ? /// </summary>
? ? /// <param name="proj"></param>
? ? /// <param name="path"></param>
? ? internal static void AddFrameworks(PBXProject proj, string path,string main,string unityframework)
? ? {
? ? ? ? if (proj == null) return;
? ? ? ? if (!File.Exists(path)) return;

? ? ? ? string str = ".Framework";
? ? ? ? string libStr = ".tdb";
? ? ? ? List<string> frameworks = new List<string>
? ? ? ? {
? ? ? ? ? ?"AssetLibrary",
? ? ? ? ? ?"StoreKit",
? ? ? ? ? ?"UIKit",
? ? ? ? ? ?"GameKit",
? ? ? ? ? ?"CoreMotion",
? ? ? ? ? ?"Photos",
? ? ? ? };

? ? ? ? List<string> libs = new List<string>
? ? ? ? {
? ? ? ? ? ? "libc++",
? ? ? ? ? ? "libSqlite3",
? ? ? ? ? ? "libz"
? ? ? ? };
? ? ? ? ? ?

? ? ? ? for (int i = 0; i < frameworks.Count; i++)
? ? ? ? {?
? ? ? ? ? ? proj.AddFrameworkToProject(unityframework,frameworks[i] + str, false);
? ? ? ? }

? ? ? ? for (int i = 0; i < libs.Count; i++)
? ? ? ? {
? ? ? ? ? ? proj.AddFrameworkToProject(unityframework, libs[i] + libStr, false);
? ? ? ? }


? ? ? ? proj.AddFrameworksBuildPhase(unityframework);
? ??
? ? }

? ? /// <summary>
? ? /// 配置 info.plist
? ? /// </summary>
? ? /// <param name="proj"></param>
? ? /// <param name="path"></param>

? ? internal static void AddPlist(PBXProject proj, string path)
? ? {
? ? ? ? if (proj == null) return;
? ? ? ? if (!File.Exists(path)) return;
? ? ? ? PlistDocument plist = new PlistDocument();
? ? ? ? plist.root.SetString("xx","xx");
? ? ? ? plist.root.SetBoolean("xx", false) ;
? ? ? ? plist.root.SetInteger("xx", 1);
? ? ? ? plist.root.SetDate("xx", System.DateTime.MaxValue);
? ? ? ? plist.WriteToFile(path);
? ? ? ?

? ? }

? ? /// <summary>
? ? /// 添加BuildSetting
? ? /// </summary>
? ? /// <param name="proj"></param>
? ? /// <param name="path"></param>
? ? internal static void AddBuildSetting(PBXProject proj, string path,string unityframework)
? ? {

? ? ? ? if (proj == null) return;
? ? ? ? if (!File.Exists(path)) return;

? ? ? ? proj.SetBuildProperty(unityframework,"xx","xx");

? ? ? ?
? ? }

? ? /// <summary>
? ? /// 添加BuildPhase
? ? /// </summary>
? ? /// <param name="proj"></param>
? ? /// <param name="path"></param>
? ? internal static void AddBuildPhase(PBXProject proj, string path)
? ? {
? ? ? ? if (proj == null) return;
? ? ? ? if (!File.Exists(path)) return;

? ? } ??


}


#endif

以上亲测可用,如果有不明白或者不了解的地方,可以和大佬们交流交流哈。

希望路过的各位大佬多多指正,小弟拜谢!

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:21:40  更:2022-04-06 16:22:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 20:14:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码