2015-09-28 2 views
2

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

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

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

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

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

EDIT Вот как выглядит мой файл .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> 
+0

Извините, но мой первый ответ был основан на неправильном чтении вашего вопроса. Каковы точные шаги, которые вы предприняли для удаления «healthkit» из «Необходимые возможности устройства»? – Allan

+0

Я зашел в файл .plist моего приложения и под заголовком UIRequiredDeviceCapabilities. Я удалил запись healthkit. Это единственный способ, которым я обнаружил, что приложение, которое ссылается на HealthKit, может быть действительно установлено на iPad (даже если код iPad не использует HealthKit). – lehn0058

+0

Звучит правильно. Каково содержимое файла ваших прав. – Allan

ответ

0

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