Antes de que todos comiencen a lanzarme otras publicaciones de desbordamiento de pila y foros: las miré todas. Ninguno de ellos está ayudando.
Tengo una herramienta cmd simple llamada swizzler y quiero incrustar el marco SwizzleSrc en ella. He seguido todos los tutoriales y los desbordamientos de pila sin suerte. Esto es lo que estoy recibiendo.
Construir
2019-02-07 19:22:46.785680-0500 Terminal[67444:11837029] flock failed to lock maps file: errno = 35 2019-02-07 19:22:46.786939-0500 Terminal[67444:11837029] flock failed to lock maps file: errno = 35Correr
Last login: Thu Feb 7 19:21:08 on ttys018 NAME-iMac:~ NAME$ /Users/NAME/Library/Developer/Xcode/DerivedData/swizzler-aslysekmorknabdslxbxfaeuiztk/Build/Products/Debug/swizzler ; exit; dyld: Library not loaded: @rpath/SwizzleSrc.framework/Versions/A/SwizzleSrc Referenced from: /Users/NAME/Library/Developer/Xcode/DerivedData/swizzler-aslysekmorknabdslxbxfaeuiztk/Build/Products/Debug/swizzler Reason: image not found Abort trap: 6 logout Saving session... ...copying shared history... ...saving history...truncating history files... ...completed. [Process completed]¿Puede ayudarme alguien, por favor? Llevo días intentándolo sin éxito.
Para solucionar su problema, debemos cambiar la forma en que Xcode maneja los objetivos de la herramienta de línea de comandos de Swift de forma predeterminada, específicamente la convención de vinculación con las bibliotecas estándar de Swift.
Necesitamos que:
SwizzleSrcswizzler para vincular dinámicamente todas las bibliotecas de Swiftswizzler pueda encontrar todas las bibliotecas Swift necesarias (ahora ubicadas en el objetivo del marco)Comencemos (se supone que está utilizando Xcode 10.1 o superior):
Esto es bastante sencillo. Cambie las siguientes configuraciones de compilación para el marco de destino de SwizzleSrc :
Esta es la parte algo complicada. Agregue la siguiente configuración definida por el usuario para el objetivo de la herramienta swizzler (en la Configuración de compilación ):
SWIFT_FORCE_DYNAMIC_LINK_STDLIB establecido en YESSWIFT_FORCE_STATIC_LINK_STDLIB establecido en NO (Para agregar una nueva configuración definida por el usuario , simplemente haga clic en el botón + justo debajo del título de la pestaña Configuración de compilación ).
Esto asegurará que su ejecutable de línea de comandos vincule dinámicamente todas las bibliotecas de Swift (es decir, por defecto están vinculadas estáticamente ). Por cierto, el Administrador de paquetes de Swift utiliza exactamente esta misma configuración para solucionar un problema relacionado.
Agregue las siguientes entradas de Runpath Search Path para el objetivo de la herramienta swizzler (en la Configuración de compilación ):
@executable_path@executable_path/SwizzleSrc.framework/Versions/Current/FrameworksAhora limpie su carpeta de compilación, reconstruya nuevamente ambos objetivos y verifique si esto solucionó su problema para siempre;)
Para obtener más información, asegúrese de consultar también los siguientes enlaces:
También creé un proyecto Xcode (¡muy!) simple que demuestra los pasos anteriores: