Нахождение IP-адреса машины для настройки Web API + iPhone - PullRequest
2 голосов
/ 01 октября 2010

Я работаю над некоторыми приложениями для iPhone, которые обмениваются данными с сервером API на основе HTTP (который является Rails, но это не имеет значения), и часто меня укусил доступ к IP (un) от iPhoneустройство на мой MacBook Pro - устройство iPhone должно нажать URL-адреса на MBP.

Прямо сейчас у меня есть что-то подобное в Config.h:

#if (TARGET_IPHONE_SIMULATOR)
// for iPhone Simulator
#define API_BASE  @"http://127.0.0.1:3000/api"
#else
// for iPhone Device
#define API_BASE  @"http://10.0.0.1:3000/api"
#endif

Работает нормально, так какесли: 1. вы работаете самостоятельно, 2. или у вас есть полный контроль над сервером DHCP, 3. или вы можете работать только с симулятором iPhone и использовать адрес обратной связи (то есть без push-уведомлений или покупки в приложении).).

Но я работаю удаленно с другими людьми, часто из кафе или библиотек, так что это беспокоит меня - теперь мне нужно вручную найти назначенный IP-адрес моего MBP, переписать вышеуказанную константу API_BASE из "10.0".0,1 "на новый адрес, и не забудьте вернуться к оригиналу, прежде чем совершать git или svn.

Есть ли какие-либо способы программно получить IP-адрес деРазрабатывать машину изнутри XCode и отправлять ее на устройство iPhone отдельно для каждой сборки?

ОБНОВЛЕНИЕ

Использование Bonjour недостаточно, потому что на каждой машине в команде естьдругое имя.

Ответы [ 4 ]

4 голосов
/ 08 октября 2010

ОК, поэтому он должен работать с несколькими средами разработки, что означает, что Bonjour не собирается его сокращать.

Я не очень знаком со средой сборки XCode. Можете ли вы установить переменные окружения, которые каким-то образом оцениваются оболочкой? Если вы можете как-то оценить следующее:

DEV_IP_ADDRESS=$(/sbin/ifconfig |awk '/inet 127.0.0.1/ { next } /inet / { print $2; exit }')

затем передается в качестве препроцессора define:

gcc <...> -DDEV_IP_ADDRESS="${DEV_IP_ADDRESS}"

и в коде:

#define API_BASE "http://" DEV_IP_ADDRESS ":3000/api"

(Я ржавый, но я смутно помню, что препроцессор объединяет последовательные строки, верно?)

Если вы можете присоединиться к ним, это должно сработать. : -)

Или вы можете объединиться с бонжуром, чтобы сделать загадочное хакерство более терпимым. Скорее всего, $HOSTNAME уже определено в вашей среде, так что если вы можете получить это в качестве препроцессора #define, вы отсортированы.

2 голосов
/ 01 октября 2010

Поскольку это уже URL, вы можете использовать имя хоста вместо IP, и оно будет решено с помощью Bonjour. Например, ноутбук, который я использую, чтобы написать это, называется Jura, что означает, что он имеет имя хоста Bonjour jura.local.

Вы можете узнать имя Bonjour DNS вашего компьютера, перейдя на панель настроек «Общий доступ». Под именем компьютера есть предложение, которое начинается с «Компьютеры в вашей локальной сети ...» и заканчивается именем, которое вы хотите использовать.

Тогда вы можете изменить вышеуказанный код на:

#define API_BASE  @"http://my-macbook-pro.local:3000/api"

потому что тот же механизм разрешит URL в симуляторе и на устройстве.

0 голосов
/ 01 октября 2010

Я обычно создаю форму или элемент управления для редактирования адреса сервера. Кнопка для формы будет доступна только в отладочных сборках (сделайте ее уродливой и красной, чтобы ее не отправлять :-)), а затем спрятали в сборках выпуска.

0 голосов
/ 01 октября 2010

Вы можете использовать bonjour .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...