HKHealthStore предпочитаемые единицы не поддерживаются для универсальных приложений?

У меня есть универсальное приложение для iOS, которое ссылается на HealthKit. Когда приложение установлено на iPhone, оно использует HKHealthStore для получения данных о работоспособности, а когда оно находится на iPad, я пропускаю запросы HealthKit, проверяя, имеет ли HKHealthStore.isHealthDataAvailable значение false. Это все работает хорошо, но для того, чтобы приложение работало на iPad, я должен удалить запись "healthkit" из списка моих приложений в разделе "Требуемые возможности устройства". Это имеет смысл, потому что на iPad нет аптечки, поэтому требуется, чтобы приложение не устанавливалось на iPad. Все это уже было сделано в приложении, которое я отправил в магазин приложений, и было одобрено.

Сейчас я делаю обновление приложения и хочу показать настройки устройства, которые пользователь мог вручную настроить в приложении "Здоровье". В документации по HKHeathStore говорится, что вы можете сделать это, используя метод предпочитаемый объект UnitsForQuantityTypes. Однако при вызове этого метода из моего приложения для iPhone возникает следующая ошибка:

Error Domain=com.apple.healthkit Code=4 "Missing com.apple.developer.healthkit entitlement." UserInfo={NSLocalizedDescription=Missing com.apple.developer.healthkit entitlement.}

За исключением того, что у меня уже есть право на аптечку в моем идентификаторе приложения. Если я добавлю строку "healthkit" в раздел "Требуемые возможности устройства" моего.plist, эта ошибка исчезнет, ​​и я получу желаемые результаты. Но это не решение для меня, потому что тогда я не могу установить приложение на iPad.

У меня вопрос: как я могу поддержать универсальное приложение, в котором версия для iPhone может сделать успешный вызов HKHealthStore.preferredUnitsForQuantityTypes?

РЕДАКТИРОВАТЬ Вот как выглядит мой файл.entitlements:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.healthkit</key>
    <true/>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.mycompany.myapp</string>
    </array>
</dict>
</plist>

1 ответ

Решение

Я узнал, что здесь происходит. Возникла проблема с тем, когда HKHealthStore запрашивал доступ к типам работоспособности и запрашивал предпочтительные единицы. Я не уверен, почему запись.plist решает эту проблему... но перемещение запроса предпочтительных единиц в блок завершения запрашивающего метода доступа HKHealthStore устранило проблему.

Другие вопросы по тегам