Usé SwiftPM para configurar un proyecto XCode para un marco; Residencia en

// swift-tools-version:4.0

import PackageDescription

let package = Package(
    name: "MyThing",
    products: [
        .library(
            name: "MyThing",
            targets: ["MyThing"]),
    ],
    dependencies: [
    ],
    targets: [
        .target(
            name: "MyThing",
            dependencies: [])
)

Ejecuté swift package generate-xcodeproj y luego pod install (basado en un Podfile cuyo contenido no debería importar). Obtengo MyThing.xcworkspace.

Ahora me imaginé que

xcodebuild -workspace MyThing.xcworkspace -scheme MyThing clean build

Debería crear el .framework - pero no lo hace, solo aparece un archivo binario. Sospecho que algo de automatismo está funcionando aquí ya que la carpeta de origen contiene un archivo llamado main.swift, entre otros.

¿Qué tengo que hacer para construir el marco?
Necesito realizar un script de todo el proceso, para no complacer soluciones manuales.

1
Raphael 22 feb. 2018 a las 17:13

2 respuestas

La mejor respuesta

La mezcla de archivos de script y código de marco en un objetivo parece confundir a SwiftPM. Mover main.swift fuera de la carpeta de origen aclara las cosas.

El esquema MyThing-Package crea todos los productos de construcción como se especifica en Package.swift, incluido el marco.

Si desea tener los archivos de script en el mismo espacio de trabajo de XCode (para mayor comodidad de edición), colóquelos en su propio destino. Incluso puede crear un producto ejecutable (que no creará nada útil ya que un ejecutable no puede vincularse a marcos dinámicos).

0
Raphael 22 feb. 2018 a las 15:11

A partir de Swift 4.0, swift package generate-xcodeproj no genera esquemas automáticamente para todos los objetivos, pero aún hace que esos objetivos sean accesibles desde Xcode.

Si es aceptable crear un nuevo esquema manualmente una vez, puede hacerlo y agregar su objetivo de marco como un objetivo de creación de esquema.

De lo contrario, se pueden crear nuevos esquemas mediante programación con bibliotecas como xcodeswift / xcproj, que le permiten analizar un nuevo generó el proyecto Xcode y genera un nuevo esquema con su clase XCSharedData.

Una vez creado ese nuevo esquema de marco, puede ejecutar la compilación con xcodebuild -workspace MyThing.xcworkspace -scheme MyThingFramework clean build.

0
Max Desiatov 22 feb. 2018 a las 14:34