如何使用Xcode 13将JAR应用签名后上传至Mac App Store
前置校验
- 已完成开发的可正常运行JAR包,本地启动验证无功能异常
- 有效付费Apple Developer Program账号,账号具备App管理、证书创建权限
- Xcode 13已完成安装,首次启动的附加组件安装、许可协议确认全部走完
- 提前在App Store Connect创建对应Mac应用记录,记录好配置的Bundle ID、应用版本号,后续所有配置必须和这里对齐
步骤1:配置签名证书与描述文件
- 打开Xcode 13,点击顶部菜单栏
Xcode > Settings,切换到Accounts页 - 点击左下角+号,选择
Apple ID,登录你的开发者账号 - 选中登录的账号,点击右侧
Manage Certificates,点击弹窗左下角+号,申请Apple Distribution类型证书,等证书自动生成并下载到本地钥匙串 - 回到苹果开发者后台的证书管理页,找到你之前记的Bundle ID,开启
App Sandbox能力,根据你的应用实际需求勾选网络、文件读写等对应权限,保存配置 - 生成该Bundle ID下的Mac App Store类型Provisioning Profile,下载后双击导入Xcode,回到Xcode账号的描述文件列表,确认该文件状态为Valid即可
步骤2:将JAR打包为标准Mac .app结构
JAR不能直接上传Mac App Store,必须封装为系统识别的.app包结构,操作如下:
- 新建文件夹,命名为
你的应用名.app,后缀必须是.app - 右键该文件夹选择「显示包内容」,进入后新建
Contents目录,在Contents下再建4个项:你的应用名.app/ └── Contents/ ├── Info.plist // 应用配置文件 ├── MacOS/ // 放启动执行文件 ├── Resources/ // 放JAR、内置JRE等资源 └── PkgInfo // 应用类型标识文件 - 将你的JAR包、适配Mac架构(同时支持Intel/Apple Silicon最好)的裁剪版JRE全部拷贝到
Resources目录下,禁止依赖用户本地安装的Java环境,否则审核100%被拒 - 在
MacOS目录下新建无后缀的shell脚本,命名和应用名一致,脚本内容如下:
写完打开终端,cd到#!/bin/bash APP_ROOT=$(cd "$(dirname "$0")/../Resources"; pwd) exec "$APP_ROOT/jre/Contents/Home/bin/java" -XstartOnFirstThread -jar "$APP_ROOT/替换成你的JAR文件名.jar"MacOS目录下执行chmod +x 你的脚本文件名,给脚本加可执行权限 - 编写
Info.plist放到Contents目录下,核心字段必须准确:CFBundleExecutable:填刚才MacOS目录下的脚本名CFBundleIdentifier:填你之前在App Store Connect配置的Bundle IDCFBundleShortVersionString:填应用对外版本号,比如1.0.0CFBundleVersion:填构建号,数字递增即可,比如1CFBundleName:填应用显示名称- 权限声明字段和你之前在开发者后台勾选的沙箱权限完全对齐
- 编辑
PkgInfo文件(无后缀),仅写入一行内容:APPL???? - 全部做完双击这个.app包,确认能正常启动,功能和直接运行JAR完全一致,无报错再进下一步
步骤3:Xcode签名归档
- 打开Xcode 13新建macOS App项目,项目名、Bundle ID和你的应用保持一致,随便选Swift+SwiftUI即可,创建完成后把默认生成的所有代码、资源文件全部删除
- 把你之前做好的.app包拖入Xcode项目导航根目录,勾选「Copy items if needed」,添加到当前Target
- 选中Target切到
General页:- Identity栏的版本号、构建号、Bundle ID和之前配置保持一致
- 在
Frameworks, Libraries, and Embedded Content列表里找到你拖入的.app,将Embed选项改为Embed & Sign
- 切到
Signing & Capabilities页:- 勾选
Automatically manage signing,Team选你对应的开发者团队 - 确认签名证书自动选中你之前创建的Apple Distribution证书,描述文件状态Valid
- 点击左上角+Capability添加
App Sandbox,勾选的权限和之前配置完全对齐
- 勾选
- 顶部菜单栏选择
Product > Destination > Any Mac (Apple Silicon, Intel),打通用架构包 - 先执行
Product > Clean Build Folder清空缓存,再执行Product > Archive开始归档,归档完成后会自动弹出Organizer窗口
踩坑处理:如果归档报代码签名无效,打开终端到你自制.app的上级目录,先执行
codesign --deep --force --sign "你的Apple Distribution证书在钥匙串里的显示名" 你的应用名.app给内置JRE、JAR做预签名,再回Xcode重新归档即可
步骤4:上传到App Store Connect
- 在Organizer窗口选中刚归档成功的构建包,点击右侧
Distribute App - 分发渠道选
App Store Connect,点击下一步 - 上传选项保持默认勾选(上传符号表、自动管理版本构建号),直接下一步
- 签名选项选
Automatically manage signing,让Xcode自动完成全组件重签,下一步 - 等Xcode完成包体、签名校验后,点击Upload等待上传完成,看到上传成功提示即可
- 上传后等待10-30分钟,去App Store Connect对应应用的TestFlight页面就能看到该构建版本,等苹果完成构建合规校验后,即可提交审核或分发给测试用户
通用注意事项
- 沙箱权限必须三处完全一致:Info.plist声明、Xcode Capabilities勾选、开发者后台Profile配置,任意一处不一致都会导致签名失败、上传报错或审核被拒
- 内置JRE必须做裁剪,不要带冗余组件,不然包体过大可能触发上传限制
- Xcode13不要用第三方工具或者直接导出pkg上传,必须走Organizer的官方上传通道,否则会缺失苹果要求的加密校验信息,导致构建版本无效
内容的提问来源于stack exchange,提问作者vipulkumarmehta
相关产品推荐
相关产品推荐

