Определите, является ли токен устройства песочницей или дистрибутивом. - PullRequest
7 голосов
/ 04 мая 2011

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

Ответы [ 4 ]

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

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

# если TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == SANDBOX");
# endif

РЕДАКТИРОВАТЬ: Исправлена ​​проблема выше.

1 голос
/ 21 февраля 2013

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

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

0 голосов
/ 05 февраля 2017

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

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

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

Тестовый токен, полученный с настоящим сервером push-уведомлений Apple . Вы можете использовать простое приложение, которое будет общаться с сервером, и вам просто нужно его настроить.

Я использовал это простое приложение "Easy APNs Provider" для macOS или любого другого.

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

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

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

0 голосов
/ 28 января 2016

Добавьте макрос препроцессора в настройки сборки вашей цели в 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, чтобы он знал, какой путь выбрать при вызове Apple APNS.

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

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

...