Envrionmental Variables в info.plist не работают - PullRequest
0 голосов
/ 16 июля 2011

Я использую info.plist в Xcode, чтобы установить переменные среды, DYLD_LIBRARY_PATH и DYLD_FRAMEWORK_PATH.

Я устанавливаю DYLD_LIBRARY_PATH на

$ CONTENTS_FOLDER_PATH / выполнения / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tiapp / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / ticodec / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tidatabase / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tifilesystem / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / timedia / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / timonkey / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tinetwork / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tiplatform / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tiprocess / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / Tiuí / 1.1.0: $ CONTENTS_FOLDER_PATH / модули / tiworker / 1.1.0

и

DYLD_FRAMEWORK_PATH до

$ CONTENTS_FOLDER_PATH / выполнения / 1.1.0

И когда я дважды щелкаю по моей папке .app, dlopen не может найти ни одного из моих .dylib, на которые есть ссылки в папках выше.

Если я беру те же точные переменные и пути и помещаю их в свои исполняемые аргументы в XCode, все работает нормально, но только если я запускаю программное обеспечение через XCode, и мне нужно, чтобы все работало, когда вы нажимаете на папку .app .

Что я делаю не так в info.plist? Разве ему не нравится $ CONTENTS_FOLDER_PATH? Нужен ли другой разделитель? Почему те же аргументы работают в исполняемых аргументах, но не в файле info.plist?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

Какой ключ вы используете в Info.plist для установки переменных среды?Вы имеете в виду, что вы устанавливаете переменные среды в конфигурации Xcode «Переменные среды» (часть схемы в Xcode 4, часть пользовательского исполняемого файла в Xcode 3), или вы имеете в виду, что вы просто бросаете ключ / значения в * 1002?* и ожидаете, что они появятся в среде?

В первом случае, даже если бы это работало, это было бы полезно только во время работы XCode, а не при отправке вашего продукта.В последнем случае Info.plist не имеет механизма для добавления переменных окружения к моим знаниям.

Лично, вместо того, чтобы иметь это огромное дерево в вашем комплекте, я бы Xcode скопировал все ваши dylibsв каталог подключаемых модулей вашего пакета (PlugIns), а затем используйте NSBundle (или CFBundle), чтобы получить путь к нему.Или вы можете использовать другой каталог, если это не «плагины».Но поместите их все в один каталог в вашем комплекте.Не ищите их.(Вы можете иметь их во многих каталогах в дереве исходных текстов; речь идет только о пакете.)

0 голосов
/ 28 октября 2011

В итоге я использовал @rpath, чтобы найти все мои библиотеки и фреймворки.Я перестроил все фреймворки и библиотеки с именем установки @ rpath / -name библиотеки или фреймворка-.

Затем я добавил в настройки пути поиска основного проекта относительные имена путей, такие как @loader_path /../ runtime / 1.1.0 и @loader_path /../ modules /, etc ...

Это позволяет вызову dlopen находить текущий путь без использования plist или исполняемых аргументов.

...