Apple Wallet卡片未到设定有效期提前过期问题求助
Apple Wallet卡片提前过期问题排查与解决
我们的应用支持生成联系人卡并添加至Apple Wallet,PHP代码中已将expirationDate设为2030-01-01T23:00:00Z,但用户添加卡片仅2天后,卡片就进入过期栏目,不符合预期有效期。
相关代码
生成Wallet卡片的PHP代码
$data = [ 'description' => 'MyApp', 'formatVersion' => 1, 'organizationName' => 'My app', 'passTypeIdentifier' => 'pass.test.test', 'serialNumber' => '12345678', 'teamIdentifier' => '*********', 'storeCard' => [ "headerFields" => [ [ "key" => "header-text", "label" => "Let's connect", "value" => "Together" ] ], "auxiliaryFields" => [ [ "key" => "aux-text-two", "label" => "", "value" => "" ], [ "key" => "aux-text-one", "label" => "www.abc.com", "value" => "" ] ], "primaryFields" => [], 'secondaryFields' => [], 'backFields' => [], ], 'barcode' => [ 'format' => 'PKBarcodeFormatQR', 'message' => 'https://abc.1-2-3-4-5.xyz/public/myapp/?id='.$userData->token.'', 'messageEncoding' => 'iso-8859-1', ], "backgroundColor" => "rgb(255,255,255)", 'logoText' => '', 'relevantDate' => date('Y-m-d\TH:i:sP'), "expirationDate" => "2030-01-01T23:00:00Z", ];
iOS端添加卡片代码
if PKPassLibrary.isPassLibraryAvailable(){ if let data = try? Data(contentsOf: url){ if let pass = try? PKPass(data: data){ let passLibrary = PKPassLibrary() if !passLibrary.containsPass(pass), let passController = PKAddPassesViewController(pass: pass){ passController.delegate = self self.present(passController, animated: true) }else{ ShowAlert(message: "contact_card_already_exist".localize(), theme: .error) } } } }
排查与解决步骤
移除或调整
relevantDate字段- 当前代码中
relevantDate设为实时时间,Apple Wallet默认会在relevantDate后的2天内保持卡片在"活跃"栏目,超过后自动移至过期栏目,这是导致问题的核心原因。 - 处理方案:如果业务不需要该字段,直接从
$data数组中删除relevantDate;若必须保留,将其设置为接近expirationDate的时间,例如:'relevantDate' => date('Y-m-d\TH:i:sP', strtotime('2029-12-31')),
- 当前代码中
验证
expirationDate的实际值- 生成pass包后,手动解压查看内部的
pass.json文件,确认expirationDate字段确实是2030-01-01T23:00:00Z,排除PHP代码中字段被意外覆盖的情况。 - 确保时区格式正确,
Z代表UTC时区,避免使用本地时区格式导致解析错误。
- 生成pass包后,手动解压查看内部的
检查设备与应用状态
- 让用户重启Apple Wallet应用,或重置设备的日期与时间设置(设置->通用->传输或还原iPhone->还原->还原所有设置),排除本地缓存或时间异常导致的误判。
- 确认设备系统时间未被手动修改为未来日期,这会导致Wallet错误识别卡片过期状态。
验证Pass包签名有效性
- 使用Apple官方的
passvalidator工具检查生成的pass包,确认签名流程未出现文件篡改,避免因签名无效导致Wallet解析字段异常。
- 使用Apple官方的
内容的提问来源于stack exchange,提问作者Jaydip Meghapara
相关产品推荐
相关产品推荐

