2011-05-04 6 views
7

Есть ли способ определить, является ли токен устройства песочницей или дистрибутивом? Мы тестируем, а приложение иногда подписывается сертификатом разработки, а другие подписываются специальным сертификатом (сертификатом распространения). Это связано с тем, что мы передаем приложение примерно одному из 100 предоставленных специальных тестовых устройств, а также создаем приложения для разработки приложений на наших устройствах. Поскольку для отправки push-уведомления требуется, чтобы мы выбрали подходящий файл push-сервера и pem, было бы здорово определить, является ли токен песочницей или дистрибутивом для отправки уведомлений соответствующим образом, чтобы прессование было успешным. Мы должны иногда использовать профиль распространения для подписи наших приложений, поэтому тестирование системы push-уведомлений требует, чтобы мы правильно доставляли эти уведомления.Определите, является ли токен устройства песочницей или дистрибутивом

ответ

8
  1. Открытых проект установки
  2. Перейти к Preprocessing настройке
  3. В разделе «макросы препроцессора не используется в скомпилированных заголовках» сборки (при условии, что вы не ветвление коды в файле .PCH), добавьте TOKEN_ENV_SANDBOX = 0 при Выпуске и TOKEN_ENV_SANDBOX = 1 под Debug и Ad Hoc.
  4. В своем коде, где только использовать директиву компилятора

#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == PRODUCTION!");
#endif

#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == SANDBOX");
#endif

EDIT: Исправлена ​​ошибка выше.

+1

Как добавить Adhoc В мои «Макросы препроцессора, не используемые в предварительно скомпилированных заголовках» – siva

+0

Могу ли я узнать, сохранилось ли это? Я заметил, что некоторые из пользователей идентифицированы как токен песочницы, с той же версией из App Store. – neobie

+1

Почему для Ad Hoc TOKEN_ENV_SANDBOX равен 0? И для отладки, TOKEN_ENV_SANDBOX = 1? Есть ли ошибка? – neobie

1

Вот что Apple, должен сказать

Вы можете определить, в какой среде Xcode вы в счет выбора идентичности подписи кода. Если вы видите пару «Профиль разработчика/профайла iPhone»: «Имя фамилия», вы находитесь в среде песочницы. Если вы видите пару «Профиль распространения сертификата/фирменного наименования» iPhone, вы находитесь в рабочей среде.

0

Добавить макрос препроцессора в настройки вашей целевой установки под Apple LLVM 7.0 - Предварительная обработка. Затем под Debug добавить что-то вроде:

isRunningInDevModeWithDevProfile=1

Тогда в вашем .PCH, вы можете сделать что-то вроде этого:

// AZ - 01282016 - Determine which environment we are running in for APNS 
# ifdef isRunningInDevModeWithDevProfile 
#  define isAPNSSandbox YES 
#else 
# define isAPNSSandbox NO 
#endif 

И тогда, когда вам нужно проверить это в вашем коде, вы можете сделать это:

NSString *ifAppIsRunningFromXcodeUsingNonReleaseProfile; 

if (isAPNSSandbox) { 
    ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"dev"; 
} else { 
    ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"prod"; 
} 

Переходит это значение обратно на наш сервер APNS так, что он знает, какой путь принять при вызове APNs Apple.

Причина, по которой я предлагаю, в этом случае, если вы оставите макрос препроцессора неопределенным в целевых объектах без отладки, это не вызовет ошибки при попытке его создания.

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

0

Я прочитал все ответы выше, и все они правильны, но не отвечают на основной вопрос: «Является ли устройство изолированной песочницей или дистрибуцией?».

Это потому, что они определяют конфигурацию сборки, не точечное качество.

Проведя несколько дней в решении этого вопроса, я попал в вперед с прямым решением:

Test фишки вы получили с реальной Apple Push Notification Server. Вы можете использовать простое приложение, которое будет разговаривать с сервером, и вам просто нужно его настроить.

Я использовал это простое приложение «Простой поставщик APNs» для macOS или любого другого.

https://itunes.apple.com/us/app/easy-apns-provider-push-notification/id989622350?mt=12

Моя основная проблема в MacOS приложение было то, что я получаю производство фишку как в Debug и Release конфигурации.

Когда вы обнаруживаете, что было проблемой, вы можете признать недействительными сертификаты, чтобы быть на 100% уверенным, что это не будет скомпрометировано.