2012-02-07 13 views
9

Tengo marcos personalizados en mi paquete de aplicaciones para WebKit, WebCore y JavaScriptCore. Me gustaría que todos los demás marcos que dependen de las versiones del sistema de WebKit, WebCore o JavaScriptCore también utilicen mis versiones personalizadas. Por ejemplo, mi versión personalizada de Webkit carga marcos de sistemas privados que a su vez dependen de la versión del sistema de WebKit. Esto significa que tanto mi WebKit como el sistema WebKit se cargan, y generalmente se produce un bloqueo poco después.¿Cuál es la forma más limpia de establecer la variable de entorno DYLD_FRAMEWORK_PATH para una compilación de versión?

La forma en que entiendo esto debe hacerse, es establecer la variable de entorno DYLD_FRAMEWORK_PATH antes de que comience la ejecución de su paquete de aplicación (el orden de búsqueda para cargar marcos se puede encontrar aquí: http://code.google.com/p/macdependency/wiki/SearchPaths). Puede establecer variables de entorno en el código con setenv, pero no tendrá efecto para el proceso en ejecución. Tendría que volver a iniciar el proceso nuevamente para que tenga efecto. Me gustaría evitar esto también.

Así que mi pregunta es ¿cuál es la mejor manera de establecer DYLD_FRAMEWORK_PATH antes de la ejecución del paquete my app? Esto también tiene que funcionar en un paquete de aplicaciones de lanzamiento. ¿Hay alguna forma de ejecutar un script cada vez que alguien hace clic en mi paquete de aplicaciones antes de que el ejecutable comience a ejecutarse? ¿O hay alguna otra sugerencia por ahí?

Gracias de antemano.

+0

¿Qué quiere decir con 'todos los demás marcos'? Si solo son sus frameworks privados, ¿no puede simplemente construirlos enlazando a su WebKit privado y frameworks relacionados? –

+0

Bueno, en algún lugar de la montaña de código que es mi Webkit personalizado, DataDectors.framework se carga si hace clic derecho en una ventana (solo en OSX Lion), y DataDectors es un marco de sistema privado (no construido por mí). Cuando esto sucede, DataDectors depende de las versiones del sistema de WebKit y JavaScriptCore, por lo que una vez que esto sucede, ahora hay 2 copias de WebKit cargadas, la mía y los sistemas. Esto causa resultados inesperados y un bloqueo. –

+1

¿Alguna vez has conseguido que esto funcione? Estoy buscando hacer algo similar, y no estoy teniendo mucha suerte con ninguno de los enfoques sugeridos. – starkos

Respuesta

1

Recomendaría environment.plist o la clave LSEnvironment en el info.plist. Revisa el enlace a continuación.

https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html

+1

El info.plist solo toma rutas absolutas, y necesito que la ruta esté dentro de mi paquete de aplicaciones, que técnicamente se puede mover. Si lo configuro en mi environment.plist es este global, porque si eso también no sería bueno, porque otras aplicaciones podrían usar la variable del entorno. –

2

Jeff Wolski has the right idea refiriéndose directamente a la documentación de Apple sobre el tema. This thread también proporciona excelentes consejos sobre cómo hacerlo en Xcode, incluyendo casos de esquina asociados con métodos alternativos de especificación (por ejemplo, usando ~/.bash_profile directamente para su usuario).

Mi razón para sonar es también solicitó un script que podría ayudarlo (y un proveedor de recompensas parece tener el mismo problema). Resulta Webkit references such a script in its documentation, que es posible que desee separar de the applicable Webkit source code. Esto debería brindarle una guía adicional sobre cómo, al menos según los desarrolladores, debe hacer esto correctamente.

La mejor de las suertes con su (s) proyecto (s).

+0

Eché un vistazo al script run-safari y el script funcionaría, pero no estoy seguro de cómo forzar un script para que se ejecute cada vez que alguien hace clic en un paquete de aplicaciones. Necesito las variables ambientales establecidas para la sesión del ejecutable dentro de mi paquete de aplicaciones. –

+0

@MichaelWildermuth Según [esta pregunta] (http://stackoverflow.com/questions/281372/executing-shell-scripts-from-the-os-x-dock), existe una plétora de opciones. Al menos uno de estos cubrirá sus necesidades, ya sea [a través de un archivo '.command'] (http://stackoverflow.com/a/281386/517815) o [el enfoque marginalmente más elaborado del Editor de scripts] (http://stackoverflow.com/a/310183/517815). Si esto no funciona para usted, discutiremos algunas de las otras opciones. :) – MrGomez

Cuestiones relacionadas