Удаляет ли компилятор Swift журналы отладки OSLog в сборках релизов или необходим ли #if DEBUG, чтобы избежать накладныхIOS

Программируем под IOS
Ответить
Anonymous
 Удаляет ли компилятор Swift журналы отладки OSLog в сборках релизов или необходим ли #if DEBUG, чтобы избежать накладных

Сообщение Anonymous »

Я работаю над приложением для iOS, используя Swift и OSLog для регистрации отладочной информации во время разработки. Я использую OSLog следующим образом:

Код: Выделить всё

import OSLog

let logger = Logger(subsystem: "com.example.app", category: "General")

func someFunction() {
logger.debug("Debugging someFunction execution")
// Function logic
}
1. Нужен ли #if DEBUG для журналов отладки с помощью OSLog?
Я видел, как некоторые кодовые базы заключают операторы журнала отладки в директивы препроцессора #if DEBUG, чтобы гарантировать их включение только в отладочные сборки, например:

Код: Выделить всё

#if DEBUG
logger.debug("Debugging someFunction execution")
#endif
Необходимо ли это при использовании OSLog? Компилятор Swift (или сам OSLog) автоматически удаляет вызовы журнала уровня отладки в сборках выпуска или мне нужно явно использовать #if DEBUG, чтобы предотвратить их выполнение?
2. Существуют ли какие-либо накладные расходы на вызов функций или другое влияние на производительность журналов отладки в режиме выпуска?
Если журналы отладки (например, logger.debug) не удаляются компилятором в сборках выпуска, существуют ли измеримые накладные расходы (например, накладные расходы на вызовы функций, использование памяти или инициализация системы журналирования)? Или процесс оптимизации компилятора Swift (или реализация OSLog) гарантирует, что журналы отладки не окажут влияния на выпускные сборки?
3. Как лучше избегать повсеместного написания #if DEBUG?
Если #if DEBUG необходим, есть ли способ избежать оборачивания каждого оператора журнала директивами препроцессора? Например, могу ли я условно определить неактивный регистратор или пустой контент для режима выпуска, чтобы упростить код? Мне нужен понятный и удобный в обслуживании подход для глобального ведения журналов отладки без повторяющихся проверок #if DEBUG.

Я ориентируюсь на iOS 14+ и использую Swift 5.7+. Я был бы признателен за любую информацию о том, как компилятор Swift обрабатывает вызовы OSLog в сборках выпуска и является ли перенос журналов отладки в #if DEBUG лучшей практикой или излишним.

Подробнее здесь: https://stackoverflow.com/questions/796 ... is-if-debu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»