Apple Wallet Pass本地开发:测试Pass更新遇SSL及签名问题求助
本地测试Apple Pass更新的完整步骤
你这刚好踩了本地调试Pass最常见的两个坑:自签SSL证书不被模拟器信任,以及HTTP模式不符合Pass签名规范。下面给你一步步拆解解决方案:
一、优先推荐:搞定HTTPS本地服务的SSL信任问题
Apple Wallet对webServiceUrl默认强制要求HTTPS(生产环境必须,测试环境也建议遵循,避免后续切换生产时踩坑),所以先解决本地HTTPS的证书信任问题:
- 步骤1:生成模拟器信任的自签SSL证书
别用随便生成的自签证书,得让iOS模拟器认它。用mkcert工具最快:- 安装mkcert:
brew install mkcert(macOS用户,其他系统对应自己的包管理工具安装) - 生成本地CA并添加到信任列表:
mkcert -install,这一步会把本地CA同步到系统和模拟器的信任库 - 为localhost生成证书:
mkcert localhost 127.0.0.1 ::1,会得到localhost.pem和localhost-key.pem两个文件
- 安装mkcert:
- 步骤2:配置本地服务使用新证书
看你的端口是5000,应该是ASP.NET Core服务,在Program.cs里配置Kestrel使用生成的证书:var builder = WebApplication.CreateBuilder(args); builder.WebHost.UseKestrel(options => { options.ListenAnyIP(5000, listenOptions => { listenOptions.UseHttps("localhost.pem", "localhost-key.pem"); }); }); - 步骤3:验证证书信任状态
重启iOS模拟器,用Safari访问https://localhost:5000,如果没有弹出证书错误提示,说明信任成功。此时再测试Pass的webServiceUrl,SSL错误应该就消失了。
二、备选方案:允许HTTP模式进行本地调试(仅用于测试,禁止生产)
如果你一定要用HTTP,必须同时满足两个条件,否则签名会直接失败:
- 步骤1:修改pass.json添加测试专属字段
在pass.json的顶层添加"allowHTTP": true,这是Apple专门给测试环境预留的字段,只有加了它,Pass签名时才会接受HTTP的webServiceUrl:{ "formatVersion": 1, "passTypeIdentifier": "你的Pass类型ID", "teamIdentifier": "你的开发者团队ID", "webServiceUrl": "http://localhost:5000/wallet/", "allowHTTP": true, // 其他原有字段... } - 步骤2:确认模拟器的HTTP权限已开启
你已经打开了Allow Http Services,但要确保是当前测试的模拟器:进入模拟器的设置 > 开发者 > Allow Http Services,确认开关处于打开状态。 - 步骤3:重新签名Pass包
修改pass.json后必须重新执行签名流程,把新的配置文件打包进去——这就是你之前改HTTP后触发签名错误的核心原因,旧的签名包还是用的原配置。
额外注意事项
- 确保本地服务的CORS配置允许Apple Wallet的请求,否则后续测试更新时可能会碰到跨域错误
- 要保证你的webService接口完全符合Apple的规范,比如实现
/version、/passes/{passTypeIdentifier}/{serialNumber}等要求的端点,否则Pass更新会失败 - 如果还是有SSL问题,可以尝试重置模拟器:
模拟器 > 设备 > 抹掉所有内容和设置,然后重新安装Pass测试
内容的提问来源于stack exchange,提问作者koufa
相关产品推荐
相关产品推荐

