Возможно ли получить локальный IP-адрес из ОПРЕДЕЛЕНИЯ препроцессора в Objective-C?

#objective-c #xcode #c-preprocessor

#objective-c #xcode #c-препроцессор

Вопрос:

Вероятно, это долгий путь, но спросить не помешает…
Как вы думаете, возможно ли получить IP-адрес узла сборки при сборке для iOS в Objective-C под xcode?
Это было бы полезно для моего тестирования, если бы это было возможно.
Например:

 NSString* backendUrl = [NSString stringWithFormat:@"http://%@:5000/", HOST_IP];
 

Где я ожидал HOST_IP бы (если бы было что-то подобное), чтобы быть чем-то вроде этого, но, конечно, автоматически контролируется во время сборки для хранения правильного IP:

 #define HOST_IP @"172.76.77.5"
 

Ответ №1:

Нет удобного решения, но вот несколько вариантов для рассмотрения.

  1. В вашем #define введите имя хоста вашего компьютера (если он находится в локальной сети) — http://mylaptop:5000 / или просто зарегистрируйтесь на бесплатный домен @ http://www.no-ip.com /
  2. Если необходимо специально иметь макрос #define, содержащий ваш IP-адрес, вы можете просто написать небольшой скрипт bash, который обновляет определенный IP-адрес в вашем файле .m / .cpp / .h или что-то еще, содержащее этот #define . затем вы можете добавить скрипт в качестве этапа предварительной сборки или просто запустить скрипт, когда узнаете, что IP-адрес изменился. хотя я признаю, что это своего рода хакерство.

Комментарии:

1. Ваш номер 2 был бы моим решением. Немного хакерский, но не совсем плохой.

Ответ №2:

Не уверен, работает ли это, но, возможно, вы могли бы сделать что-то вроде

статическая строка NSString *HOST_IP;

-(id) инициализация
{
 if (self = [super init])
 {
 HOST_IP = // Ваш код
 }
 возвращает self;
}

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

Комментарии:

1. извините, это не сработает. ваш метод сохранит IP-адрес, если устройство, на котором оно запущено. однако я запрашивал IP-адрес сервера сборки (который также является моим серверным сервером отладки)