Соло-разработчик сканера чеков ReceiptIQ добавил самую просимую фичу: одна подписка на семью и общие чеки. Сервера, аккаунтов и копий данных вне телефонов нет: устройства синхронизируются напрямую по Wi-Fi. Он расписал архитектуру и что сломалось по дороге.
Главный трюк: телефон родственника сам проверяет, что владелец платит. StoreKit 2 отдаёт транзакцию как JWS с подписью Apple (
jwsRepresentation; jsonRepresentation подделывается), устройство проверяет цепочку сертификатов, подпись, bundle ID и environment == Production. Следствие: в TestFlight пейринг не потестировать, там Sandbox.Слияние по last-writer-wins принесло классику: перештамповал
modifiedAt при применении, и два телефона гоняли запись по кругу. Ещё один баг прожил два месяца: пир молча пропускал недоступные фото, синк не завершался, хотя данные доходили. Лечит таймаут тишины 30 секунд.Есть синк между устройствами? Сверьте свои инварианты с его списком.