Swift Package wewnątrz Xcode Playground

  • by

Photo by Danielle MacInnes on Unsplash

Nie wiem jak Ty ale ja placów zabaw używam praktycznie do wszystkiego! Nie ważne czy to jest szybki kawałek kodu na 2 linijki, sprawdzenie systemowego API czy badanie jakiegoś tematu. Placów zabaw mam dużo i z wieloma stronami.

To jest np. plac zabaw gdzie zbieram materiały zgodnie z pewnym tematem.

Trochę tego jest!

Gdy już ten temat dojrzeje to przenoszę go do jeszcze innego placu zabaw. Do tego ten jest współdzielony przez DropBox z moimi znajomymi abyśmy mogli się wygodnie i szybko wymieniać pomysłami (tak słyszałem o czymś takim jak git).

Zależności w Placu Zabaw Xcode

Jednak jest coś czego mi zawsze brakowało. To coś to łatwość używania zewnętrznych zależności w tak przygotowanym placu zabaw. Są metody proste i nieco bardziej skomplikowane ale jest nowy szeryf w mieście. Tym szeryfem jest Xcode12 beta.

Zanim przejdziemy dalej muszę powiedzieć, że wystartowałem korzystając z tych 2 wspaniałych artykułów:

Problem

Niestety w moim przypadku rozwiązanie #1 nie zadziałało, coś po prostu nie szło. Przypadek #2 zawiera informacje jak działać z lokalnymi pakietami ale za to ma informacje co trzeba włączyć aby stworzone wcześniej place zabaw zadziałały.

Rozwiązanie

  1. Zapisujemy stary plac zabaw jako workspace: Xcode -> File -> Save As Workspace

2. Otwieramy workspace przy pomocy Xcode 12; zaznaczamy dowolną stronę placu zabaw i w ustawieniach ptaszkujemy opcję Build Active Scheme

Active Scheme jest kluczem aby to zadziałało!

3. Dodaj nowy Swift Package, który posłuży do ściągania zależności.

Upewnij się, że dodajesz do właściwego workspace i grupy.

4. Skonfiguruj Package.swift. Tutaj dla przykładu jest zaciągnięta biblioteka ułatwiająca pracę z nilami o nazwie OptionalAPI . Czasami trzeba zwrócić uwagę na minimalne wersje platform jakich wymagają zaciągnięte pakiety.

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription

let package = Package(
    name: "WrapPackage",
    platforms: [
           .macOS(.v10_13),
           .iOS(.v11),
           .tvOS(.v11),
           .watchOS(.v3)
       ],
    products: [
        .library(
            name: "WrapPackage",
            type: .dynamic,
            targets: ["WrapPackage"]),
    ],
    dependencies: [

        // Dependencies go here
        .package(
            name: "OptionalAPI",
            url: "https://github.com/sloik/OptionalAPI",
            from: "2.2.1"
        ),

    ],
    targets: [
        .target(
            name: "WrapPackage",
            dependencies: [

                // And products of dependencies here
                .product(name: "OptionalAPI", package: "OptionalAPI"),

        ]),


        .testTarget(
            name: "WrapPackageTests",
            dependencies: ["WrapPackage"]),
    ]
)

5. Ponieważ ten pakiet jest zaciągnięty jako zależność do lokalnego pakietu, który został stworzony. To jest widoczny tylko w nim. Na szczęście można go publicznie wyeksportować: @_exported import OptionalAPI

6. Można się bawić w placu zabaw 🙂

Zaimportowana w placu zabaw zewnętrzna zależność.
Nawet QuickHelp działa 🙂

Podsumowanie

Jeszcze raz muszę podkreślić, że gdybym nie natkną się na tamte dwa wpisy to bym nie połączył kropek. Dlatego też zachęcam Ciebie do ich przeczytania. Są krótkie i rzucają dodatkowe światło jak całe rozwiązanie działa.

Jeżeli jesteś też takim leniuszkiem jak ja to pewnie wolisz ściągnąć takie place zabaw. Czy to aby ich używać czy też porównać. Tak więc link jest tu: https://github.com/sloik/SloikPresentations/tree/master/DependenciesInSwiftPlayground

Owocnej nauki 🤓

Tagi:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *