Можно ли обнаружить во время выполнения, что приложение было установлено через TestFlight Beta (отправленное через iTunes Connect), а не в App Store? Вы можете отправить один комплект приложений и сделать его доступным через оба. Есть ли API, который может определить, каким образом он был установлен? Или квитанция содержит информацию, позволяющую это определить?
ios
testflight
комбинаторный
источник
источник
Ответы:
Для приложения, установленного через TestFlight Beta, файл квитанции имеет имя вместо
StoreKit\sandboxReceipt
обычногоStoreKit\receipt
. Используя,[NSBundle appStoreReceiptURL]
вы можете найти sandboxReceipt в конце URL-адреса.Обратите внимание, что
sandboxReceipt
это также имя файла квитанции при выполнении сборок локально и для сборок, запускаемых в симуляторе.источник
[[[[NSBundle mainBundle] appStoreReceiptURL] lastPathComponent] isEqualToString:@"sandboxReceipt"]
(Верно, если запущен распределенный двоичный файл TestFlight) через Supertop / HaddadStoreKit/sandboxReceipt
получаются при установке в качестве отладочной сборки через Xcode на устройстве или симуляторе. Таким образом, это может неточно отличать сборки testflight от всех других сборок.На основе комбинаторного ответа я создал следующий вспомогательный класс SWIFT. С помощью этого класса вы можете определить, является ли это отладкой, тестовой сборкой или сборкой магазина приложений.
Мы используем эти методы в нашем проекте для предоставления разных идентификаторов отслеживания или строк подключения для каждой среды:
ИЛИ:
ОБНОВЛЕНИЕ 05-02-2016: Необходимым условием для использования макроса препроцессора, такого как #if DEBUG, является установка некоторых пользовательских флагов компилятора Swift. Дополнительная информация в этом ответе: https://stackoverflow.com/a/24112024/639227
источник
-D DEBUG
флаг. Более подробную информацию можно найти здесь .#if targetEnvironment(simulator)
вы определяете, бегаете ли вы в симуляторе. Итак, у меня есть варианты Simulator / TestFlight / AppStore (которые в моем случае предпочтительнееDebug
) :-)Современная версия Swift, которая учитывает симуляторы (на основе принятого ответа):
источник
isTestFlight()
Обновить
Это больше не работает. Используйте другой метод.
Оригинальный ответ
Это тоже работает:
Найдено в разделе "Определить, загружено ли приложение iOS из Apple Testflight"
источник
Я использую расширение
Bundle+isProduction
на Swift 5.2:Затем:
источник
Есть один способ, которым я использую его в своих проектах. Вот шаги.
В Xcode перейдите в настройки проекта (проект, а не цель) и добавьте в список конфигурацию «бета»:
Затем вам нужно создать новую схему, по которой проект будет запускаться в «бета» конфигурации. Чтобы создать схему, перейдите сюда:
Назовите эту схему как хотите. Вам следует отредактировать настройки для этой схемы. Для этого нажмите здесь:
Выберите вкладку Архив, где вы можете выбрать
Build configuration
Затем вам нужно добавить ключ
Config
со значением$(CONFIGURATION)
в список свойств информации о проектах, например:Тогда дело в том, что вам нужно в коде, чтобы сделать что-то конкретное для бета-сборки:
источник