Objective-C — Наличие конфигурации TestFlight для включения TestFlight SDK

Я следовал инструкциям TestFlight, чтобы продублировать конфигурацию «выпуска». Также я использую TestFlight SDK для получения отчетов в реальном времени из своего приложения. Для этого мне пришлось включить в свое приложение некоторый код TestFlight. Конечно, я не хочу, чтобы этот код был в моей релизной версии моего приложения.

Есть ли способ включить этот код только в конфигурацию testflight (дублированная конфигурация выпуска)? То же самое вы можете сделать с #ifdef DEBUG для конфигурации отладки (или мне нужно создать для этого отдельную цель и включить только TestFlight SDK в эту цель?)


person Peter Warbo    schedule 06.11.2011    source источник


Ответы (3)


Вы можете довольно легко исключить выполнение кода с помощью инструкций #ifdef, как мы предлагаем для нашего сервиса HockeyApp здесь: http://support.hockeyapp.net/kb/client-integration/crash-reporting-on-ios.-quincykit

В основном это:

  1. Добавьте макрос препроцессора в свой проект Xcode для всех конфигураций: CONFIGURATION_$(CONFIGURATION)

  2. Затем вы сможете использовать эти строки кода для включения кода только для определенной конфигурации:

    #if defined (CONFIGURATION_Beta)
        // YOUR CODE
    #endif
    
  3. Это заменяет Beta на имя вашей конфигурации, которое должно включать только код

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

У вас должна быть одна конфигурация для отладки, которая предназначена для разработки, одна для бета-распространения, чтобы установить права adhoc, и одна для распространения в магазине приложений. Последние два обычно являются вариациями конфигурации выпуска.

person Kerni    schedule 07.11.2011
comment
Но будет ли SDK TestFlight исключен из сборки релиза из-за другой конфигурации? - person Peter Warbo; 07.11.2011
comment
Если вы не вызовете его, он не будет выполняться в других конфигурациях. Но код SDK как есть по-прежнему будет в двоичном формате, если вы не исключите файлы из конфигурации магазина приложений, см.: stackoverflow.com/questions/2270202/ - person Kerni; 07.11.2011
comment
Я рекомендую принять этот ответ. Я следовал инструкциям здесь и по ссылкам, а детали описал в сообщение в блоге. - person theory; 20.12.2011

Я думаю, вам придется создать отдельную конфигурацию сборки и использовать что-то вроде #ifdef TESTFLIGHT. Вы должны добавить макрос для этой конфигурации, чтобы он был определен только для конфигурации TestFlight.

person Jef    schedule 06.11.2011
comment
Примечание: вам, вероятно, лучше продублировать конфигурацию отладки, потому что она строится быстрее. Конфигурация выпуска создает (если настроено) исполняемый файл для нескольких архитектур. - person Jef; 06.11.2011
comment
Любая конкретная причина, по которой команда TestFlight рекомендует (поддержку. testflightapp.com/kb/tutorials/) дублирует конфигурацию релиза? - person Peter Warbo; 06.11.2011
comment
После некоторых исследований я думаю, что моя заметка неверна. Вместо этого используйте релиз. Извини. - person Jef; 06.11.2011

Мое решение состоит в том, чтобы иметь отдельную ветку в Git для версии Testflight, которая включает SDK и вызовы в коде, заголовках и т. д.

Затем я выполняю всю свою работу над основной веткой и обновляю ветку Testflight с учетом этих изменений. Таким образом, мне не нужно включать библиотеки или заголовки, которые я не использую в своей поставляемой версии.

Это проще, чем кажется.

person Abizern    schedule 06.11.2011
comment
Как вы синхронизируете две ветки? Вы что-то обновляете в своей основной ветке, а затем копируете обновленный код в ветку TestFlight? - person Peter Warbo; 06.11.2011
comment
Я просто перезаписываю изменения. Поскольку rebase отслеживает удаления, у меня обычно есть главная ветка, в которой идет разработка, а затем релизная версия идет в свою собственную ветку, из которой я уже удалил код, который мне не нужен. Затем я просто переустанавливаю производственную ветку на master. У меня есть пример (правда, без Testflight, но вы поняли идею) здесь - person Abizern; 06.11.2011