Coder Social home page Coder Social logo

cwlsignal's Introduction

CwlSignal

An implementation of reactive programming. For details, see the article on Cocoa with Love, CwlSignal, a library for reactive programming

Adding to your project

This project can be included in your projects in a number of different ways:

The standard restrictions for each of these approaches apply so you'll need to pick an approach based on your situation and preferences.

Minimum requirements are iOS 8 or macOS 10.10.

Manual framework inclusion

  1. In a subdirectory of your project's directory, run git clone https://github.com/mattgallagher/CwlSignal.git
  2. Drag the "CwlSignal.xcodeproj" file from the Finder to somewhere your in own project's file tree in Xcode
  3. Drag the "CwlSignal.framework" and CwlUtils.framework" from the "Products" folder of the "CwlSignal" project to the "Copy Files (Frameworks)" build phases of any target that you want to include this module.

That third step is a little tricky if you're unfamiliar with Xcode but it involves:

  1. click on your project in the file tree
  2. click on the target that you want to include CwlSignal
  3. select the "Build Phases" tab
  4. if you don't already have a "Copy File" build phase with a "Destination: Frameworks", add one using the "+" button in the top left of the tab (it should appear at the bottom of the list of build phases)
  5. drag the CwlSignal.framework and CwlUtils.framework from the "Products" subfolder inside the CwlSignal.xcodeproj in the Xcode file tree onto the "Copy File (Frameworks)" build phase. There will be two frameworks with these names (the macOS and iOS versions). Drag the two which are immediately above the corresponding CwlSignal_macOSTests.xctest or CwlSignal_iOSTests.xctest product.

Swift Package Manager related problems and errors

When building using this approach, the "FetchDependencies" target will use the Swift Package Manager to download the "CwlUtils" project from github. The checkout is placed in the "Build intermediates" directory for your project. Normally, you can ignore this detail but you will need network access when building the first time and if you get any errors from the "FetchDependencies" target, you might need to take some appropriate steps.

In particular, when jumping around between Swift versions or checking out different repository versions, you may see:

swift-package: error: unsatisfiable

or

!!! swift package show-dependencies failed

as errors in the build log.

In this case, try deleting the "Package.pins" file in the root directory of CwlSignal and trying again. If this doesn't help, try cleaning the build folder. (Hold "Option" key while selecting "Product" → "Clean Build Folder..." from the Xcode menubar).

If you want to download dependencies manually (instead of using this behind-the-scenes use of the Swift package manager), you should delete the "FetchDependencies" target and replace the "CwlUtils" targets with alternatives that build the dependencies in accordance with your manual download.

Statically included files

This approach generates three concatenated files (CwlUtils.swift, CwlSignal.swift and CwlSignalExtensions.swift) that can be added to another project – macOS or iOS – with no dynamic frameworks, libraries or other settings required.

  1. Get the latest version of CwlSignal by running git clone https://github.com/mattgallagher/CwlSignal.git on the command-line.
  2. Open the CwlSignal.xcodeproj in Xcode and select the CwlSignalConcat scheme with a destination of "My Mac" (choose from the Scheme popup in the toolbar or from the "Product" → "Scheme" and "Product" → "Destination" menus in the menubar.
  3. Build the scheme (Command-B or "Product" → "Build")
  4. Open the "Products" folder by right-clicking (or Control-click) on the "Products" folder in the project's file tree in Xcode and select "Show in Finder" and open the "Debug" folder in the "Products" folder that this reveals.

Inside a folder located "Concat_internal" should be three files:

  • CwlUtils_internal.swift
  • CwlSignal_internal.swift
  • CwlSignalExtensions_internal.swift

You can copy these three files and include them in any of your own projects like any other files.

A folder named "Concat_public" should also be present. This version is almost identical to the "Concat_internal" version except that where the "Concat_internal" version strips public and open specifiers from files, the "Concat_public" version leaves these in-place. This allows the "Concat_public" version to be use in the "Sources" folder of Swift playgrounds or otherwise used where the features need to be exported from a module.

NOTE: this approach will pull CwlUtils from github using the Swift Package Manager, as with the Manually included framework instructions. If you get errors from the FetchDependencies build step, see the note in the Manually included framework section on cleaning the build folder and .pins files.

Swift Package Manager

Add the following to the dependencies array in your "Package.swift" file:

.Package(url: "https://github.com/mattgallagher/CwlSignal.git", majorVersion: 1),

Or, if you're using the swift-tools-version:4.0 package manager, add the following to the dependencies array in your "Package.swift" file:

.package(url: "https://github.com/mattgallagher/CwlSignal.git", majorVersion: 1)

CocoaPods

Add the following lines to your target in your "Podfile":

pod 'CwlSignal', :git => 'https://github.com/mattgallagher/CwlSignal.git'
pod 'CwlUtils', :git => 'https://github.com/mattgallagher/CwlUtils.git'

Carthage

Add the following line to your Cartfile:

git "https://github.com/mattgallagher/CwlSignal.git" "master"

cwlsignal's People

Contributors

mattgallagher avatar xjki avatar andreyz avatar ashton-w avatar benstiglitz avatar monyschuk avatar sleifer avatar waldyrious avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.