Cómo importar sus propias clases desde su propio proyecto a un patio de recreo

Asum una configuración como esta:

  • Tienes un proyecto de Xcode 6, donde has implementado tus propias clases (digamos MyView y MyViewController) con Objective-C y Swift
  • Has agregado un área de juegos en tu proyecto

En Playground, es posible importar módulos (frameworks) como UIKit con la palabra clave import . ¿Cómo habilita el acceso a las otras clases del proyecto desde el patio de recreo?

Solo tratando de acceder directamente a las clases del proyecto se genera un mensaje de error: Uso del identificador no resuelto ‘MyView’

A partir de Xcode 6.0 Beta 5, ahora es posible importar sus propios marcos en un patio de juegos. Esto proporciona una forma de compartir el código entre sus aplicaciones y juegos, que pueden importar sus marcos. Para hacer esto:

  1. Su patio de recreo debe estar en el mismo espacio de trabajo que el proyecto que produce su marco. Su espacio de trabajo debe contener un objective que produzca el marco, en lugar de utilizar un marco preconstruido.

  2. Usted ya debe haber construido su marco. Si se trata de una infraestructura de iOS, debe estar construida para un destino de ejecución de 64 bits (por ejemplo, iPhone 5s) y debe estar construida para el simulador.

  3. Debe tener un esquema activo que genere al menos un objective (la ubicación de comstackción de ese objective se usará en la ruta de búsqueda del marco para el patio de recreo).

  4. Su preferencia de “Ubicación de comstackción” (en la configuración avanzada de “Ubicaciones” de Xcode) no debe establecerse en “Legado”.

  5. Si su marco no es un marco Swift, la configuración de comstackción “Define el módulo” debe establecerse en “Sí”.

  6. Debe agregar una statement de importación a su patio de recreo para el marco.

Una vez que se cumplan todas estas condiciones, la importación de su marco funcionará en un patio de juegos.

En Xcode 7 presentamos otro mecanismo que puede usar para importar sus propias clases como fuente, en lugar de importar un marco; Puede leer sobre este soporte de “Fuentes Auxiliares” en http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af

De hecho, me las arreglé para referirme a otros archivos de Swift en el proyecto actual al hacer esto:

  • Crea un Playground vacío y el lugar está en algún lugar debajo de tu proyecto.
  • Abra el paquete YourPlayground.playground (sí, es un paquete = directorio) en Terminal.
  • Edite contents.xcplayground por ejemplo con vi y agregue otra sección como esta:
         
  • Cambie el nombre de la section-1.swift a section-2.swift (si creó el patio de recreo desde cero, debe haber un ejemplo de section-1.swift en su paquete)
  • Agregue un enlace section-1.swift (el enlace simbólico no parece funcionar) llamado section-1.swift que apuntará fuera del paquete a su archivo de clase Swift como:
 ln ../../Classes/MyView.swift section-1.swift 
  • Cierre Xcode y abra Playground nuevamente.
  • Ahora debe haber dos secciones, una con el contenido de su archivo de clase Swift y la otra con el contenido de ejemplo que obtuvo de la creación de la Zona de juegos desde cero.

De esta forma, puedo ejecutar código realmente fuera del área de juegos, pero Xcode parece bloquearse más a menudo al hacerlo así.

Editar:

A partir de Xcode 6 beta 5, ahora puede consultar los archivos del proyecto, como lo instruye Rick Ballard en su respuesta .

Desde Beta 5 de Xcode 6 es posible importar su código si está en un marco. Lo que debe hacer es crear un objective de infraestructura, agregar los archivos de Swift allí y en su patio de recreo

 import ModuleName 

Puede buscar el nombre del módulo en la configuración de comstackción. Por lo general, es lo mismo que el nombre del objective.

Recuerde hacer que el código que desea ver sea public . Deberá construir el proyecto antes de que haya cambios disponibles en el patio de recreo. (También necesitarás editar el patio de recreo para desencadenar una nueva ejecución).

Importante

¡No le dé al archivo del patio de recreo el mismo nombre que el objective! Si lo hace, la importación parece funcionar, pero obtendrá el siguiente error cuando el patio de recreo intente ejecutar:

La ejecución de Playground falló: error: no se pudieron buscar símbolos:

Perdí una hora en descifrar eso. 🙂

No pude hacerlo funcionar usando ninguna de las respuestas aquí, así que comencé a jugar y encontré una manera simple que funcionó para mí para importar una clase rápida en un patio de recreo.

Simplemente crea un patio de juegos en tu proyecto, hay un directorio dentro de él llamado ‘fonts’, simplemente arrastra una copia de la clase rápida a esa carpeta y el patio de recreo tendrá acceso a ella.

Por ejemplo:

enter image description here

Acabo de poner enlaces a todos mis archivos rápidos en la carpeta de Sources :

 cd /path/to/project/MyPlayground.playground/Sources ln -s ../../*.swift . 

De esta forma, los cambios en su archivo fuente tendrán efecto en su patio de recreo inmediatamente. Funcionó muy bien .

Xcode 8.2, Swift 3.0.1, macOS Sierra

Todo lo que tienes que hacer es escribir al principio:

 import ModuleName 

(suponiendo que su área de juegos se ubique en el mismo espacio de trabajo que el marco / proyecto)

Si no funciona:

  1. Reconstruye tu proyecto

  2. Recrea el patio de recreo y copia todo desde el antiguo patio de juegos allí

¡Soluciona muchos errores extraños con inicios fallidos e importaciones de lo que sea!