Me pregunto si hay una manera de utilizar FileMerge como una herramienta independiente. No quiero instalar Xcode, ya que no lo necesito. Sólo quiero la aplicación FileMerge. ¿Es posible?
Respuestas
¿Demasiados anuncios?FileMerge 2.8, que se incluye en Xcode 5.0.1, enlaza con los frameworks que se encuentran dentro del paquete Xcode.app. Las bibliotecas compartidas que utiliza FileMerge pueden mostrarse ejecutando el comando:
otool -L /Applications/Xcode.app/Contents/Applications/FileMerge.app/Contents/MacOS/FileMerge
La salida de este comando indica que FileMerge necesita utilizar los frameworks DevToolsInterface, DevToolsCore y DevToolsFoundation. :
/Applications/Xcode.app/Contents/Applications/FileMerge.app/Contents/MacOS/FileMerge:
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1247.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1052.0.0)
@rpath/DevToolsInterface.framework/Versions/A/DevToolsInterface (compatibility version 1.0.0, current version 3000.1.0)
@rpath/DevToolsCore.framework/Versions/A/DevToolsCore (compatibility version 1.0.0, current version 2404.0.0)
@rpath/DevToolsFoundation.framework/Versions/A/DevToolsFoundation (compatibility version 1.0.0, current version 3001.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 852.0.0)
El prefijo @rpath
indica que dyld
utilizará la lista de rutas de ejecución para buscar los marcos a los que se hace referencia. En concreto, FileMerge contiene "../OtherFrameworks"
en su lista de rutas de ejecución. Cuando se encuentran dentro del paquete Xcode.app, esos frameworks están justo donde FileMerge espera que estén.
Sin embargo, si copias FileMerge fuera del paquete de Xcode.app, FileMerge se bloqueará al iniciarse. Esto ocurre porque los frameworks referenciados (mencionados anteriormente) no están en la lista de rutas de ejecución, lo que hace que dyld
para salir con un error de "image not found"
. La razón por la que no puede encontrar esos marcos referenciados es que una carpeta en la ruta relativa "../OtherFrameworks"
no existe, y los frameworks no existen en ninguna otra carpeta listada en la ruta de ejecución.
Para utilizar FileMerge sin la aplicación Xcode instalada, tienes un par de opciones:
-
Copie FileMerge en la ubicación que elija y copie el contenido de
/Applications/Xcode.app/Contents/OtherFrameworks/
a una de las carpetas referenciadas en la lista de rutas de ejecución (~/Library/Frameworks
o/Library/Frameworks
son probablemente un par de las mejores opciones). -
Copie FileMerge en la ubicación que elija y copie el contenido de
/Applications/Xcode.app/Contents/OtherFrameworks/
para estar en"../OtherFrameworks"
en relación con la aplicación FileMerge (por ejemplo, si FileMerge está en~/Applications
, copie la carpeta"OtherFrameworks"
a~/OtherFrameworks
Editar
La respuesta anterior permite que FileMerge se inicie, pero la aplicación terminará cuando intente realmente comparar archivos. Aparentemente la aplicación está buscando información de la plataforma en la ruta ../Developer/Platforms/MacOSX.platform/Info.plist
. Esto significa que es necesario copiar Info.plist
de /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist
a ../Developer/Platforms/MacOSX.platform/Info.plist
(relativo a FileMerge.app). Estos son algunos de los pasos que podrían utilizarse para copiar FileMerge a una carpeta en ~/Applications
:
mkdir ~/Applications
cp -R /Applications/Xcode.app/Contents/Applications/FileMerge.app ~/Applications
cp -R /Applications/Xcode.app/Contents/OtherFrameworks/* ~/Library/Frameworks
mkdir -p ~/Developer/Platforms/MacOSX.platform
cp /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist ~/Developer/Platforms/MacOSX.platform