Skip to content
Powerful dependency injection for iOS & OSX (Objective-C & Swift)
Objective-C XSLT CSS HTML Swift Shell Other
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea Making Typhoon swizzle-free for Assembly definitions. Nov 16, 2016
.scripts Convert tests to XCTest May 27, 2014
Resources Clean up docs. Feb 15, 2015
Source fix tab Mar 17, 2019
Tests fix tab Mar 17, 2019
Typhoon.xcodeproj Travis config has been updated to use newer OSX image. Xcode project … Jul 2, 2019
Typhoon [Add]: Warnings Xcode configuration file Sep 21, 2015
TyphoonFrameworkSwiftExample Variable replaced to dynamic variable for injection in example project. Jun 28, 2019
TyphoonFrameworkSwiftExampleTests All sources converted to Swift3 with automatic converter Nov 27, 2016
TyphoonTests Adding target for building Typhoon as a dynamic framework for iOS. This Dec 9, 2014
test_output Unit tests fixed Oct 1, 2018
.gitattributes Use Copyright-Header.txt as template for the header. Dec 13, 2013
.gitignore [Add]: Ignore GCOV files generated by Xcode Sep 21, 2015
.gitmodules Removed the git submodule with OCLogTemplate, embedded it directly in… Sep 14, 2015
.swift-version Added swift version for cocoapods validation Nov 30, 2016
.travis.yml Travis config has been updated to use newer OSX image. Xcode project … Jul 2, 2019
CHANGELOG.md Add missed issues in #354 Jun 11, 2015
Copyright-Header.txt Update Copyright-Header.txt Feb 17, 2015
Doxyfile Fix logo missing from docs. Feb 15, 2015
LICENSE First commit. Dec 30, 2012
MainPage.dox Clean up docs. Feb 15, 2015
README.md Updating travis ci link Mar 12, 2019
StyleSettings.plist
Typhoon.podspec bump version Mar 18, 2019
build.sh build script changed Oct 18, 2016
generate-docs.sh Add missing files. Dec 24, 2014
publish-build-results.sh Fix publish build results script. Mar 10, 2015

README.md

Typhoon

Typhoon

Powerful dependency injection for Cocoa and CocoaTouch. Lightweight, yet full-featured and super-easy to use.

Not familiar with Dependency Injection?

Visit the Typhoon website for an introduction. There's also a nice intro over at Big Nerd Ranch, or here's an article, by John Reid. Quite a few books have been written on the topic, though we're not familiar with one that focuses specifically on Objective-C, Swift or Cocoa yet.

Is Typhoon the right DI framework for you?

Check out the feature list.

Looking for a pure Swift Solution?

Typhoon uses the Objective-C runtime to collect metadata and instantiate objects. It powers thousands of Objective-C applications and is also pretty popular for Swift. Nonetheless there are some advantages to using a pure Swift library.

  • Typhoon Swift is available! It uses 'compile-time' code generation.
  • Fiery Crucible is also an excellent light-weight (just one file) and very straight-forward DI library for Swift.

Both of the above solutions have the 'ObjectGraph' scope (you can read more about it in the docs), which provides a way to assemble a complex object-graph from a blue-print and then retain it as long as needed. This scope was introduced by Typhoon, and is an important consideration for mobile and desktop apps. Moreover, scope management is one of the main advantages to simply applying the DI pattern 'by hand'.

Please think carefully before choosing a DI library that forces you to write complex adapters, modify your code or tightly couple it to a library. It shouldn't be more complicated than understanding and applying the pattern without a supporting framework.


Usage

let assembly = MyAssembly().activated()
let viewController = assembly.recommendationController() as! RecommendationController

Open Source Sample Applications

Have a Typhoon example app that you'd like to share? Great! Get in touch with us :)

Installing

Build Status codecov CocoaPods Version Pod Platform Carthage compatible Dependency Status Pod License

Typhoon is available through CocoaPods or Carthage, and also builds easily from source.

With CocoaPods . . .

Static Library

# platform *must* be at least 5.0
platform :ios, '5.0'

target :MyAppTarget, :exclusive => true do

pod 'Typhoon'

end

Dynamic Framework

If you're using Swift, you may wish to install dynamic frameworks, which can be done with the Podfile shown below:

# platform *must* be at least 8.0
platform :ios, '8.0'

# flag makes all dependencies build as frameworks
use_frameworks!

# framework dependencies
pod 'Typhoon'

Simply import the Typhoon module in any Swift file that uses the framework:

import Typhoon

With Carthage

github "appsquickly/Typhoon"

From Source

Alternatively, add the source files to your project's target or set up an Xcode workspace.

NB: All versions of Typhoon work with iOS5 and up (and OSX 10.7 and up), iOS8 is only required if you wish to use dynamic frameworks.


Feedback

I'm not sure how to do [xyz]

If you can't find what you need in the Quick Start or User Guides above, then Typhoon users and contributors monitor the Typhoon tag on Stack Overflow. Chances are your question can be answered there.

I've found a bug, or have a feature request

Please raise a GitHub issue.

Interested in contributing?

Great! Here's the contribution guide.

I'm blown away!

Typhoon is a non-profit, community driven project. We only ask that if you've found it useful to star us on Github or send a tweet mentioning us (@appsquickly). If you've written a Typhoon related blog or tutorial, or published a new Typhoon powered app, we'd certainly be happy to hear about that too.

Typhoon is sponsored and led by AppsQuick.ly with contributions from around the world.


© 2012 - 2015 Jasper Blues, Aleksey Garbarev and contributors.

You can’t perform that action at this time.