appmetrica/appmetrica-sdk-ios

AppMetricaCrashes - Privacy Manifest issue

justnicke opened this issue · 10 comments

📚 AppMetrica SDK Version

5.2.0

🛠️ Xcode Version

Version 15.1 (15C65)

📱 Device Information

⚙️ Installation Method

Swift Package Manager

📝 Description

Добрый день!

При работе с AppMetricaCrashes 5.1.0 и 5.2.0 приходит уведомления от Apple

Manifest

🔍 Reproducing the issue

  1. Установить AppMetrica через SPM
  2. Добавить в таргет AppMetricaCore и AppMetricaCrashes
  3. Установить конфигурацию
import AppMetricaCrashes

final class SomeService {

    func setup() {
        let crashesConfiguration = AppMetricaCrashesConfiguration()
        AppMetricaCrashes.crashes().setConfiguration(crashesConfiguration)
    }
}
  1. Сделать сборку проекта

📋 Relevant AppMetrica Log Output or Crash Logs

No response

📦 Attach Package.resolved (Swift Package Manager Users)

Click to expand Package.resolved
{
  "pins" : [
    {
      "identity" : "apollo-ios",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apollographql/apollo-ios",
      "state" : {
        "revision" : "eedde2151859011a44bb7cb05388deb2bf532644",
        "version" : "1.9.3"
      }
    },
    {
      "identity" : "appmetrica-sdk-ios",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/appmetrica/appmetrica-sdk-ios",
      "state" : {
        "revision" : "766808009096e0e6f0648fbaf1b5460508b6c3ae",
        "version" : "5.2.0"
      }
    },
    {
      "identity" : "floatingpanel",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/scenee/FloatingPanel",
      "state" : {
        "revision" : "8f2be39bf49b4d5e22bbf7bdde69d5b76d0ecd2a",
        "version" : "2.8.2"
      }
    },
    {
      "identity" : "inputbaraccessoryview",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/nathantannar4/InputBarAccessoryView",
      "state" : {
        "revision" : "17ced92a5dccb36512b408b6276353631d7cbe57",
        "version" : "6.3.0"
      }
    },
    {
      "identity" : "ios-sdk",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/mindbox-cloud/ios-sdk",
      "state" : {
        "revision" : "8e63056c69f365e999e7f1684c24fa4acb1a6f39",
        "version" : "2.8.3"
      }
    },
    {
      "identity" : "kscrash",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/kstenerud/KSCrash",
      "state" : {
        "revision" : "8e29ada12998c47b1ca595bb21d47a27f4e57b22",
        "version" : "1.17.0"
      }
    },
    {
      "identity" : "marqueelabel",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/cbpowell/MarqueeLabel",
      "state" : {
        "revision" : "877e810534cda9afabb8143ae319b7c3341b121b",
        "version" : "4.5.0"
      }
    },
    {
      "identity" : "messagekit",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/MessageKit/MessageKit",
      "state" : {
        "revision" : "1993e8e90d4e9a61b8d9bc8ceb733964ce943376",
        "version" : "4.2.0"
      }
    },
    {
      "identity" : "r.swift",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/mac-cain13/R.swift",
      "state" : {
        "revision" : "384eab88d1a0b98ac96f4819e50a4308ecd5359f",
        "version" : "7.5.0"
      }
    },
    {
      "identity" : "snapkit",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/SnapKit/SnapKit",
      "state" : {
        "revision" : "2842e6e84e82eb9a8dac0100ca90d9444b0307f4",
        "version" : "5.7.1"
      }
    },
    {
      "identity" : "sqlite.swift",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/stephencelis/SQLite.swift.git",
      "state" : {
        "revision" : "e78ae0220e17525a15ac68c697a155eb7a672a8e",
        "version" : "0.15.0"
      }
    },
    {
      "identity" : "swift-argument-parser",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apple/swift-argument-parser.git",
      "state" : {
        "revision" : "46989693916f56d1186bd59ac15124caef896560",
        "version" : "1.3.1"
      }
    },
    {
      "identity" : "xcodeedit",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/tomlokhorst/XcodeEdit",
      "state" : {
        "revision" : "b6b67389a0f1a6fdd9c6457a8ab5b02eaab13c5c",
        "version" : "2.9.2"
      }
    }
  ],
  "version" : 2
}

🍫 Attach Podfile.lock (CocoaPods Users)

No response

Спасибо за предоставленный отчёт. Не могли бы вы, пожалуйста, прикрепить файл Package.resolved для более детального анализа?

Добавил

Непосредственно в нашем коде SDK нет Required Reason API, связанном с местом на диске. Подобный API используется только в нашей подзависимости KSCrash, однако он задекларирован в Privacy Manifest, в версии, которую вы используете, судя по Package.resolved. Не могли бы вы предоставить дополнительную информацию от Apple, которая помогла бы определить, какая именно зависимость вызывает проблему? Это помогло бы нам лучше понять ситуацию и принять необходимые меры.

К сожалению вся информация от Apple, которую предоставил выше, это затрудняет поиск проблемы, но точно могу сказать, что при локализации, после добавления в таргет AppMetricaCrashes приходит данное уведомление.

Попробовал через cocoapods и проблема разрешилась.

Завтра еще раз проверю SPM

Так как через CocoaPods все хорошо, а SPM выскакивает ошибка, то может быть проблема в версии Package манифеста в KSCrash. У них отдельный манифест для Swift 5.1, где не было еще возможности указать ресурсы пакета. В манифесте для 5.3 есть ресурс.Может быть у вас в окружении проекта указан Swift ниже 5.3?

Еще можно перед отправкой в AppStore Connect посмотреть какие манифесты есть в архиве. Если проблема действительно в SPM у KSCrash, то скорее всего не будет этотого файла: Archives/<your_app>.xcarchive/Products/Applications/<your_app>.app/KSCrash_KSCrash/Recording.bundle/PrivacyInfo.xcprivacy. При интеграции с CocoaPods будет бандл KSCrashPrivacy, где будет лежать манифест.

Swift 5.9
В privacy report через SPM данные файлы имеются.

Спасибо за предоставленные детали и за ваше терпение. Вот два возможных шага, которые мы можем предпринять для решения вашей проблемы:

  1. Включение декларации в Privacy Manifest: Если вы подозреваете, что проблема может быть связана с нашим SDK или подзависимостями, рекомендуем вам включить соответствующую декларацию API в ваш Privacy Manifest. Это можно сделать, добавив массив NSPrivacyAccessedAPITypes с причинами использования API, аналогичными тем, которые декларированы в KSCrash.

  2. Предоставление архивов: Для тщательного анализа вашей ситуации, было бы очень полезно, если бы вы могли предоставить нам архивы, сгенерированные с использованием SPM и CocoaPods. Это даст нам возможность глубже понять различия в методах интеграции и, возможно, определить причину возникновения проблемы. Пожалуйста, загрузите архивы на облачное хранилище и отправьте нам ссылки через нашу службу поддержки, чтобы гарантировать конфиденциальность данных.

Потенциальное решение проблемы найдено и отправлено на проверку в kstenerud/KSCrash#463. Как быстро оно будет смержено и выйдет в следующей версии, зависит от мэинтейнеров проекта.

Похоже, вышел KSCrash 1.17.1, в котором должна быть решена проблема. Если вы всё ещё используете версию 5.2.0 нашего SDK, то обновитесь до 5.3.0 и убедитесь, что установился KSCrash 1.17.1.
Если вы уже на версии 5.3.0, чтобы обновить только KSCrash, можно выполнить команду:

pod update KSCrash