Как установить (установить переменную среды) с помощью файла основного меню (xib) в программировании Cocoa или Xcode?

Я новичок как в программировании Cocoa, так и в Xcode. Мне интересно, как я могу установить (или установить переменную среды) с помощью файла MainMenu.nib (или .xib). У меня есть чужой код в основной функции, например:

[NSApplication sharedApplication];
[NSBundle loadNibNamed:@"MainMenu" owner: NSApp];

После второй строки он может получить переменную окружения:

if (!getenv("R_HOME")) {
    fprintf(stderr, "R_HOME is not set.\n");
    return -1;
}

Я хочу знать, как можно создать файл nib (или xib), например, MainMenu.xib, в последней версии Xcode 3, чтобы его можно было использовать для setenv. Одна вещь, которую я сделал, это закодировать setenv без использования nib-файла:

setenv("R_HOME", "/Library/Frameworks/R.framework/Resources", 1)

Но это не сработало, когда я выполнил программирование графического интерфейса Cocoa, дважды щелкнув xxx.app, хотя это сработало, когда я выполнил версию командной строки программы. Итак, похоже, мне нужен способ установки переменных среды при запуске приложения Mac с графическим интерфейсом. Я видел другие способы установки переменных среды, но я хочу знать, как можно установить переменные среды, используя файлы nib (или xib) и загрузив их с помощью метода loadNibNamed NSBundle.


person Sangcheol Choi    schedule 24.12.2011    source источник


Ответы (3)


Я хочу знать, как можно создать файл nib (или xib), например, MainMenu.xib, в последней версии Xcode 3, чтобы его можно было использовать для setenv.

Файлы пера не имеют ничего общего с переменными среды. Они не содержат никакого кода и не влияют на программу, кроме предоставления данных, используемых для создания экземпляров классов, предоставляемых кодом приложения. Я предполагаю, что вы можете написать класс, который устанавливает переменные среды, а затем использовать перо для создания экземпляра этого класса, но не будет никакой разницы между этим и простым созданием экземпляра класса в вашем коде.

Одна вещь, которую я сделал, заключалась в том, чтобы закодировать setenv без использования файла nib: ... Но это не сработало, когда я выполнил программирование графического интерфейса Cocoa, дважды щелкнув xxx.app, хотя это сработало, когда я запускаю версию командной строки программы.

Откуда ты знаешь, что это не сработало? Вы вызываете getenv(), чтобы проверить значение R_HOME в вашем коде, или вы используете команду типа env в терминале? Если последнее, вы не смотрите на ту же среду, в которой была установлена ​​​​переменная.

Итак, похоже, мне нужен способ установки переменных среды при запуске приложения Mac с графическим интерфейсом.

Что вы пытаетесь достичь? Кажется маловероятным, что вы будете устанавливать переменную окружения для использования вашей собственной программой — она уже знает это значение, поэтому выходить за пределы среды кажется бессмысленным. Вы пытаетесь связаться с другой программой?

Я видел другие способы установки переменных среды, но я хочу знать, как можно установить переменные среды, используя файлы nib (или xib) и загрузив их с помощью метода loadNibNamed NSBundle.

Опять же, на самом деле нет пересечения между файлами пера и переменными среды. Если вы хотите иметь возможность изменять поведение вашего приложения на основе какой-либо внешней переменной, вы можете установить переменные среды в своем файле .login, и эти значения должны быть доступны для чтения вашим приложением. Возможно, лучшим решением было бы использовать систему значений по умолчанию — ваше приложение может читать и записывать значения в системе значений по умолчанию через NSUserDefaults, и вы можете читать и записывать те же значения в командной строке с помощью команды defaults.

person Caleb    schedule 24.12.2011
comment
Я думаю, что вы правы по всем пунктам. Я ошибся, когда отлаживал свой код. setenv и getenv работали. - person Sangcheol Choi; 24.12.2011

Переменные среды обычно устанавливаются вместе с опциями в ваших схемах.

В меню «Продукт» выберите «Редактировать схему» и выберите желаемую цель. Теперь справа выберите вкладку «Аргументы».

На вкладке «Аргументы» вы можете установить параметры командной строки и переменные среды, которые будут передаваться запущенному приложению.

person Niels Castle    schedule 24.12.2011

Чтобы установить переменные среды в распространяемом приложении так, чтобы они устанавливались даже для пользователей (Xcode влияет только на отладку), установите свойство LSEnvironment в файле Info.plist вашего приложения.

person Peter Hosey    schedule 25.12.2011