You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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脚本,命名和应用名一致,脚本内容如下:
    #!/bin/bash
    APP_ROOT=$(cd "$(dirname "$0")/../Resources"; pwd)
    exec "$APP_ROOT/jre/Contents/Home/bin/java" -XstartOnFirstThread -jar "$APP_ROOT/替换成你的JAR文件名.jar"
    
    写完打开终端,cd到MacOS目录下执行chmod +x 你的脚本文件名,给脚本加可执行权限
  • 编写Info.plist放到Contents目录下,核心字段必须准确:
    • CFBundleExecutable:填刚才MacOS目录下的脚本名
    • CFBundleIdentifier:填你之前在App Store Connect配置的Bundle ID
    • CFBundleShortVersionString:填应用对外版本号,比如1.0.0
    • CFBundleVersion:填构建号,数字递增即可,比如1
    • CFBundleName:填应用显示名称
    • 权限声明字段和你之前在开发者后台勾选的沙箱权限完全对齐
  • 编辑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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:12:30