Unity 打包 iOS,Xcode 构建并上传 App Store

一、准备工作(环境、账号、证书与项目基础)

  • 系统与工具

    • macOS:使用与最新 Xcode 兼容的版本。
    • Xcode:从 Mac App Store 安装最新稳定版(建议与当前 App Store 必需的 Xcode 主版本保持一致)。
    • Unity:使用一个长期支持或稳定版本;安装 iOS Build Support(含 IL2CPP 与 Mac Build Support)。
    • CocoaPods:若项目或三方 SDK 使用 Pod,安装 pod 工具:sudo gem install cocoapods
    • 命令行工具:Xcode 安装后运行 xcode-select --switch /Applications/Xcode.app
  • Apple 开发者账号

    • 申请与开通:加入 Apple Developer Program(个人或公司)。
    • 角色分配:确保有 App Manager、Developer、Access to Certificates 等权限,便于创建 App、证书与上传构建。
  • 证书、App ID、Provisioning Profile

    • App ID(Bundle ID):在开发者后台创建,如 com.company.game,开启所需 Capabilities(如 Push、Game Center、IAP、Sign in with Apple 等)。
    • 证书类型:
      • iOS Development(开发调试)
      • iOS Distribution / App Store(商店分发)
    • 描述文件(Provisioning Profiles):
      • Development(开发真机调试,需设备 UDID)
      • App Store(上架分发,不需要绑定设备)
      • Ad Hoc(线下分发,需设备 UDID;可选)
    • 注意:做 TestFlight 不需要收集测试机 UDID;Ad Hoc 才需要。
  • 素材与合规准备

    • App 图标与启动屏:iOS 要求使用 Launch Screen Storyboard(禁止旧式静态 Launch Images)。Unity 可配置“Custom iOS Target Launch Screen”或自定义 Storyboard。
    • 隐私与合规:
      • 隐私权限文案:在 Info.plist 填写各权限用途说明,如 NSCameraUsageDescription、NSMicrophoneUsageDescription、NSUserTrackingUsageDescription(若使用 IDFA/广告)。
      • 数据类型与用途:App Store Connect“隐私营养标签”填写。
      • 加密合规:如使用或链接到加密,需在提交时填写出口合规问答。
    • 截图与预览:准备 6.7" iPhone、5.5" iPhone、iPad(如支持)的截图与可选预览视频。

二、Unity 工程配置(iOS + IL2CPP)

  • 切换平台
    • File -> Build Settings -> iOS -> Switch Platform
    • Scenes In Build:勾选你的首场景在列表顶部
  • Player Settings 关键项
    • Identification
      • Company Name/Product Name:作为包信息来源
      • Bundle Identifier:与开发者后台 App ID 一致
      • Version(CFBundleShortVersionString,如 1.0.0)
      • Build(CFBundleVersion,整数自增,如 1、2、3…)
      • Signing Team ID:填你的团队 ID(可启用 Unity 自动签名)
    • Resolution and Presentation
      • Default Orientation:根据游戏设定(竖屏/横屏)
      • Status Bar:一般隐藏
      • Launch Screen:推荐使用自定义 Storyboard(符合 Apple 要求)
    • Other Settings
      • Scripting Backend:IL2CPP(iOS 必须)
      • Api Compatibility Level:.NET Standard 2.1 或兼容你项目的最低要求
      • Target minimum iOS Version:根据你的受众与 SDK 要求(常见 12.0+ 或 13.0+)
      • Architecture:ARM64(App Store 仅支持 64 位)
      • Metal:仅启用 Metal(OpenGL ES 已不再推荐)
      • Allow ‘HTTP’ downloads:如需非 HTTPS,配置 ATS(更推荐服务端改为 HTTPS)
      • Script Call Optimization:Fast but no Exceptions(性能优先);若依赖异常栈,使用 Slow and Safe
      • Managed Stripping Level:Medium/High 以减小包体,但注意反射类保留(可用 link.xml)
      • Objective-C/C++ Exceptions:如第三方 SDK 需要,可启用 C++ Exceptions
      • Bitcode:Xcode 14 起已移除,无需配置
    • Optimization
      • Strip Engine Code:开启以减小体积(注意兼容)
      • IL2CPP Code Generation:Faster(发布)或 Faster Runtime(调试)
  • 构建导出
    • Build Settings:选择 “Build”(建议不要直接 Build and Run)
    • 输出为 Xcode 工程目录
    • 如用到 Pods,Unity 会生成 Podfile;首次用 Xcode 运行前执行 pod install 生成 .xcworkspace

三、使用 IL2CPP 构建与 Xcode 编译

  • CocoaPods(如有)

    • 在 Xcode 工程目录执行:pod install
    • 之后请使用 Unity-iPhone.xcworkspace 打开工程(而非 .xcodeproj)
  • Xcode 签名与能力

    • Signing & Capabilities
      • 勾选 Automatically manage signing(推荐)并选择 Team
      • Bundle Identifier 要与 Profile 的 App ID 匹配
      • 添加所需 Capabilities(Push、IAP、Game Center 等)
    • Build Settings
      • Provisioning Profile / Code Signing:自动签名时通常无需手配
      • Build Configuration:Release 用于提交
    • 运行一次 Archive 前,先在模拟器或真机“Build”验证无编译错误

四、命令行打包(xcodebuild)

  • 清理与归档(不使用 Pods 的工程)

    • xcodebuild clean archive -project Unity-iPhone.xcodeproj -scheme Unity-iPhone -configuration Release -destination 'generic/platform=iOS' -archivePath build/Unity-iPhone.xcarchive
  • 清理与归档(使用 Pods 的工程,注意 workspace)

    • xcodebuild clean archive -workspace Unity-iPhone.xcworkspace -scheme Unity-iPhone -configuration Release -destination 'generic/platform=iOS' -archivePath build/Unity-iPhone.xcarchive
  • 导出 IPA(需要 exportOptions.plist)

    • 示例:App Store 导出 exportOptions.plist
      • {
        "method": "app-store",
        "uploadSymbols": true,
        "compileBitcode": false,
        "destination": "export",
        "signingStyle": "automatic",
        "stripSwiftSymbols": true
        }
    • 执行导出
      • xcodebuild -exportArchive -archivePath build/Unity-iPhone.xcarchive -exportPath build/ipa -exportOptionsPlist exportOptions.plist
    • 完成后在 build/ipa 下获得 .ipa 文件
  • 进阶:显式指定签名(如需)

    • 在 archive 命令后追加:
      • DEVELOPMENT_TEAM=你的TeamID CODE_SIGN_STYLE=Automatic
    • 若使用手动签名,设置 PROVISIONING_PROFILE_SPECIFIER、CODE_SIGN_IDENTITY 等

五、上传到 App Store Connect

  • 方式 A:Xcode Organizer(最稳妥)
    • Xcode -> Product -> Archive -> Distribute App -> App Store Connect -> Upload
    • 完成后在 App Store Connect 的 “TestFlight” 或 “App Store” 可看到构建
  • 方式 B:Transporter(GUI)
    • 从 Mac App Store 安装 Transporter,用 Apple ID 登录,拖拽 .ipa 上传
  • 方式 C:CI/自动化(可选)
    • 可用 fastlane deliver/pilot 实现一键上传(团队内可再落地)

六、TestFlight 测试

  • 内测(Internal):
    • 团队成员可立即使用,无需 Beta 审核
  • 外测(External):
    • 需提交 Beta 审核(通常较快),可邀请最多 10,000 名测试者
  • 测试配置
    • 填写测试信息、合规问答(加密等),设置过期提醒
    • 可分发测试说明与反馈渠道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94893.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统安装stata软件教程

1、解压缩2、点击next3、选择第一个,然后next4、这里随便填写就行5、选择stataMP,然后next6、这里改个路径,例如D:\Program Files\Stata18\7、这里不用管,选择next8、点击install,开始安装过程9、安装过程展示。10、最…

Android 开发 - 数据共享(数据共享、内容提供者实现、动态权限申请)

一、数据共享 1、内容提供者 内容提供者 ContentProvider 为 APP 存取内部数据提供统一的外部接口,让不同的应用之间得以共享数据2、流程理解 Client APP 将用户的输入内容通过 ContentProvider 跨进程通信传递给 Server APP3、数据访问 利用 ContentProvider 只实现…

【51单片机按键按下数码管秒增计时并LED亮释放停计时LED熄】2022-11-12

缘由单片机控制数码管及LED灯-嵌入式-CSDN问答 #include "REG52.h" sbit k1P3^0; unsigned char Js0;//计时 unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07 ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64,15,56}; //共阴0~F消隐减号 void…

IBMS集成管理系统与3D数字孪生智能服务系统的应用

一九九二九九零七八八三一、数据全生命周期安全:从采集到销毁的闭环防护整合系统的核心风险之一是数据泄露或篡改(如设备控制参数、建筑安防布局、人员动线数据),需覆盖数据流转的每个环节:1. 数据采集阶段&#xff1a…

Vue3组件加载顺序

父组件&#xff1a;QualityFile.vue<script setup lang"ts" name"QualityFile"> ...... </script><template><el-container class"container"><el-header class"header"><!-- 标题 --><div cl…

GitHub 宕机自救指南:应急预案与替代平台

GitHub 宕机自救指南:应急预案与替代平台 对于全球数百万开发者而言,GitHub 的稳定运行至关重要。然而,即便是最可靠的服务也可能出现意外中断。当 GitHub 无法访问时,代码托管、协作开发、持续集成与部署(CI/CD)等关键环节都将受到影响。本指南旨在为您提供一套完整的应…

将跨平台框架或游戏引擎开发的 macOS 应用上架 Mac App Store

随着 macOS 用户数量的增长&#xff0c;越来越多的开发者希望将自己的桌面应用或游戏上架到 Mac App Store&#xff0c;以便触达更多用户并获得官方的分发优势。但 Apple 的上架流程相比其他平台要严格得多&#xff0c;涉及签名、打包、沙盒、审核、公证等环节。本文将以博文的…

拷贝构造和赋值重载有什么区别

问题拷贝构造和赋值重载有什么区别我的回答拷贝构造函数和赋值运算符重载是C中两个看似相似但用途和行为有明显区别的特性。拷贝构造函数是用来创建一个新对象作为已存在对象的副本。它的形式是ClassName(const ClassName& other)&#xff0c;在以下情况会被调用&#xff1…

(笔记)输入法框架协作机制深度分析

概述 Android输入法框架&#xff08;IMF - Input Method Framework&#xff09;是Android系统中负责管理虚拟键盘和文本输入的核心组件。该框架协调输入法服务&#xff08;IME&#xff09;、应用程序和系统输入系统之间的复杂交互&#xff0c;为用户提供灵活高效的文本输入体验…

解开 Ansible 任务复用谜题:过滤器用法、Include/Import 本质差异与任务文件价值详解

1. 什么是变量过滤器&#xff08;Variable Filters&#xff09;&#xff1f;请列举几个常用的Jinja2过滤器及其用途。变量过滤器是在Jinja2模板中用于修改或格式化变量输出的工具。常用过滤器&#xff1a;to_json/to_yaml&#xff1a;将数据结构&#xff08;如字典、列表&#…

LangGraph-笑话评估器 应用实战

场景&#xff1a;用户指定冷笑话主题&#xff0c;生成冷笑话后&#xff0c;进行评估&#xff0c;如果不搞笑就需要重新生成以下代码实现了一个基于LangGraph的冷笑话自动生成与评估工作流。系统包含两个核心节点&#xff1a;生成器根据用户主题创作冷笑话&#xff0c;评估器对笑…

Paimon——官网阅读:Flink 引擎

Flink 引擎 快速入门 本文档是在Flink中使用Paimon的指南。 相关JAR包 Paimon目前支持Flink 1.20、1.19、1.18、1.17、1.16、1.15 。为获得更好的体验&#xff0c;我们推荐使用最新的Flink版本。 下载对应版本的JAR文件。 目前&#xff0c;Paimon提供两种类型的JAR包&…

2025.8.28总结

工作日精进&#xff1a;今天终于把SPN控制器对接成功了&#xff0c;之前对接出现各种各样的问题&#xff0c;搞得自己都有些心力交瘁。感觉自己明明很忙&#xff0c;也在努力的去推动进度&#xff0c;但还是阻塞了两三天。最后求助了另一个同事&#xff0c;结果在他的指导和帮忙…

使用 Action 自动部署 VuePress 到 GitHub Pages

⚙️ 成果&#xff1a; 框架&#xff1a;VuePress 2 vuepress/plugin-blog打包工具&#xff1a;Vite&#xff08;viteBundler&#xff09;包管理&#xff1a;pnpmCI/CD&#xff1a;GitHub Actions部署方案&#xff1a; 源码仓库&#xff1a;urfread1010/mind-elevation打包结…

【人工智能】2025年AI代理开源革命:社区驱动的智能体生态重塑未来

还在为高昂的AI开发成本发愁?这本书教你如何在个人电脑上引爆DeepSeek的澎湃算力! 2025年,AI代理(AI Agents)的开源浪潮席卷全球,标志着人工智能从封闭的商业模式向社区驱动的协作生态转型。这一浪潮由开源社区主导,推动了智能体的快速迭代和民主化发展。本文深入探讨了…

QT:【第一个QT程序】【信号和槽】

目录 一. 第一个QT程序 1.1纯代码实现 1.2可视化操作实现 1.3 项目文件解析 1.3.1 .pro文件解析 1.3.2 widget.h 文件解析 1.3.3 main.cpp文件解析 1.3.4 widget.cpp 1.3.5 widget.ui文件解析 1.4对象树 演示自动释放的过程 1.5 中文乱码 1.6 Qt窗口坐标系 二. 信…

河南萌新联赛2025第(七)场:郑州轻工业大学

河南萌新联赛2025第&#xff08;七&#xff09;场&#xff1a;郑州轻工业大学 If I only could, Id be running up that hill&#xff01;郑轻有品&#xff01;背景终于不是二次元了… 是Stranger Things&#xff01;希望我能像主题曲里那样&#xff0c;勇攀高峰&#xff0c;R…

Java 获取淘宝商品详情(item get)API 接口实战指南

在电商领域&#xff0c;获取商品详情数据对于市场分析、价格监控、用户体验优化等场景具有重要意义。淘宝作为国内领先的电商平台&#xff0c;提供了丰富的 API 接口供开发者使用&#xff0c;其中 taobao.item.get 和 taobao.item.get_pro 接口可以用来获取商品的详细信息。本文…

配送算法17 AFramework for Multi-stage Bonus Allocation in meal delivery Platform

AFramework for Multi-stage Bonus Allocation in meal delivery Platform本文针对美团每日数十万单因无人接单而被取消的痛点&#xff0c;提出“多阶段动态奖金分配”框架&#xff1a;先用半黑盒模型预估奖金—接单概率关系&#xff0c;再用拉格朗日对偶动态规划离线算出阶段乘…