Эссе о разработке игр, мышлении и книгах

Комбо-баг от Apple

Червяк в надкусаном яблоке.

Хочу передать благодарность разработчикам платёжного API AppStore, за то, что в пятницу в 19 вечера мне пришла ужасная бага «не работают платежи».

Ошибка оказалась не страшной и заключалась в том, что эплы хитро сломали своё API (минимум второй раз за полгода!). Сломали очень «удачно» для нашей системы, нарушив сразу два своих же соглашения по формату данных.

Как работало раньше:

  1. При проверке платежа API возвращало информацию о нём, включая идентификатор приложения.
  2. Идентификатор приложения — строка.
  3. В случае оплаты через песочницу идентификатор приложения не устанавливается.
  4. Для обработки этого случая мы получаем идентификатор так:

    data.get(‘app_item_id’, ‘sandbox’)

  5. При сохранении платежа в базу мы проверяем наличие идентификатора, если его нет — паникуем.

  6. Проверка делается так:

    if app_id: … # оно ж строка

Что сделали эплы:

  1. В песочнице начали возвращать идентификатор приложения.
  2. Установили его в 0.
  3. 0 — целым.

Как следствие, у нас сломались и получение идентификатора и проверка его наличия. И бедные тестовые платежи перестали корректно обрабатываться.

Каким образом оно пролезло в их прод я не понимаю. Достаточно было написать один из двух явно необходимых тестов (проверка наличия идентификатора и/или проверка типа идентификатора), чтобы такой фигни не случалось.