Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use frameworks imported with carthage in swift playground

i have a swift project with some frameworks added via carthage. Is it possible to use those frameworks in playground inside project and how to use it, because

import Argo

doesn't work :(

like image 630
Alexey Poimtsev Avatar asked Apr 26 '15 20:04

Alexey Poimtsev


People also ask

How do I add a framework to a swift project?

In the app, select the project from the project navigator, select the Stocktance target, and scroll to Frameworks, Libraries, and Embedded Content. Click on the plus button, click Add Other… and select Add Files… Navigate to the SettingsKit folder and select it. We've added the framework to the project.


1 Answers

This stopped working at some point. Sigh

What I do now is

  • Create a macOS > Command Line Tool.
  • Create a Cartfile with github "ReactiveX/RxSwift" and run carthage update --platform iOS
  • Go to the command line tool target and add the frameworks from Carthage/Build/iOS in Linked frameworks and Libraries
  • Add the playground files.

At this point I’m able to run the playground files.

🤷🏻‍♂️


A playground has access to external frameworks if it is part of a workspace that builds a target configured to access those frameworks.

If you want to add a playground to an existing carthage project, you only need to save the project as a workspace (File > Save as Workspace…), build the target, and you are done.

If you just want to distribute a playground with third party frameworks, you need to create a dummy workspace. Here is a step by step example for a playground with the RxSwift framework:

  1. Create a new Xcode project of type Cross-platform > Other > Empty. Name it RxPlayground.
    This will create this structure RxPlayground/RxPlayground.xcodeproj and open a blank Xcode.

  2. Download RxSwift with Carthage

    • Create a Cartfile with this line: github "ReactiveX/RxSwift" "swift4.0"
    • Run Carthage with carthage update --platform iOS.
  3. Add a playground to the project.

    • Click File > New > Playground…
    • Choose the iOS > Blank template and name it Rx.playground
    • Right click the project node and choose “Add Files to RxPlayground”.
    • Select the Rx.playground and add it.
  4. Create a workspace

    • Click File > Save as Workspace…
    • Save as Rx.xcworkspace
  5. Copy the frameworks to the products directory.

    • Close the project and open the Rx.xcworkspace
    • Create a Cross-platform > Other > Aggregate. Name it RxAggregate
    • Create a New Run Script Phase with the following content:
    cp -rv "${SRCROOT}/Carthage/Build/iOS/" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"

At this point, Xcode and the Finder look like this:

xcode

Note that Carthage/ and Cartfile.resolved appear when you run Carthage, Without them, your playground will be only a few Ks.

Finder

Lastly, build the project (⌘B). Now you can use the framework in your playground:

//: Playground - noun: a place where people can play
import RxSwift

_ = Observable<Void>.empty()
    .subscribe(onCompleted: {
        print("Completed")
    })

Sometimes the first time you build (⌘B) Xcode doesn’t notice the new framework (sigh). What I do is click on the target and back to a source file, or re-open the project. I don’t have an explanation why this happens.

like image 130
Jano Avatar answered Sep 17 '22 17:09

Jano