diff --git a/Cartfile b/Cartfile index 2c824ee..7f87ebe 100644 --- a/Cartfile +++ b/Cartfile @@ -1 +1,3 @@ github "Swinject/Swinject" ~> 2.4 +github "Quick/Nimble" +github "Quick/Quick" \ No newline at end of file diff --git a/README.md b/README.md index 7309ff7..3671557 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,30 @@ container.register(Animal.self) { _ in Cat(name: "Mimi") } If you implicitly instantiate `UIWindow` and its root view controller, the registrations setup for "Main" storyboard can be shared with the referenced storyboard since `defaultContainer` is configured in `setup` method. +### Arguments +if you want to pass some arguments, you can do it in such way: + +1) Register VC +```swift +let container = SwinjectStoryboard.defaultContainer +container.storyboardInitCompletedArgs(AnimalViewController.self) { (r, c, arg1: Int, arg2: SomeValue) in + c.animal = r.resolve(Animal.self) + c.countAnimals = arg1 + c.someValue = arg2 +} +container.register(Animal.self) { _ in Cat(name: "Mimi") } +``` + +2) Resolve VC +```swift +let sb = SwinjectStoryboard.create( + name: "Animals", bundle: nil, container: container) +let firstArg: Int = 5 +let secondArg: SomeValue = SomeValue() +let catController = sb.instantiateViewController(withIdentifier: "SomeIdentifier", arg1: firstArg, arg2: secondArg) as! AnimalViewController +``` + + ## Credits SwinjectStoryboard is inspired by: diff --git a/Sources/SwinjectStoryboard.swift b/Sources/SwinjectStoryboard.swift index 414f28d..2dc7f08 100644 --- a/Sources/SwinjectStoryboard.swift +++ b/Sources/SwinjectStoryboard.swift @@ -93,7 +93,7 @@ public class SwinjectStoryboard: _SwinjectStoryboardBase, SwinjectStoryboardProt return viewController } - private func injectDependency(to viewController: UIViewController) { + fileprivate func injectDependency(to viewController: UIViewController) { guard !viewController.wasInjected else { return } defer { viewController.wasInjected = true } @@ -105,6 +105,7 @@ public class SwinjectStoryboard: _SwinjectStoryboardBase, SwinjectStoryboardProt if let container = container.value as? _Resolver { let option = SwinjectStoryboardOption(controllerType: type(of: viewController)) typealias FactoryType = ((Resolver, Container.Controller)) -> Any + let _ = container._resolve(name: registrationName, option: option) { (factory: FactoryType) in factory((self.container.value, viewController)) as Any } as Container.Controller? } else { fatalError("A type conforming Resolver protocol must conform _Resolver protocol too.") @@ -210,3 +211,100 @@ public class SwinjectStoryboard: _SwinjectStoryboardBase, SwinjectStoryboardProt } #endif + + +extension SwinjectStoryboard { + + #if os(iOS) || os(tvOS) + + private func injectDependency(to viewController: UIViewController, arg: Arg) { + guard !viewController.wasInjected else { return } + defer { viewController.wasInjected = true } + + let registrationName = viewController.swinjectRegistrationName + + if let container = container.value as? _Resolver { + let option = SwinjectStoryboardOption(controllerType: type(of: viewController)) + typealias FactoryType = ((Resolver, Container.Controller, Arg)) -> Any + let _ = container._resolve(name: registrationName, option: option) { (factory: FactoryType) in factory((self.container.value, viewController, arg)) as Any } as Container.Controller? + } else { + fatalError("A type conforming Resolver protocol must conform _Resolver protocol too.") + } + + for child in viewController.children { + injectDependency(to: child) + } + } + + private func injectDependency(to viewController: UIViewController, arg1: Arg1, arg2: Arg2) { + guard !viewController.wasInjected else { return } + defer { viewController.wasInjected = true } + + let registrationName = viewController.swinjectRegistrationName + + if let container = container.value as? _Resolver { + let option = SwinjectStoryboardOption(controllerType: type(of: viewController)) + typealias FactoryType = ((Resolver, Container.Controller, Arg1, Arg2)) -> Any + let _ = container._resolve(name: registrationName, option: option) { (factory: FactoryType) in factory((self.container.value, viewController, arg1, arg2)) as Any } as Container.Controller? + } else { + fatalError("A type conforming Resolver protocol must conform _Resolver protocol too.") + } + + for child in viewController.children { + injectDependency(to: child) + } + } + + private func injectDependency(to viewController: UIViewController, + arg1: Arg1, arg2: Arg2, arg3: Arg3) { + guard !viewController.wasInjected else { return } + defer { viewController.wasInjected = true } + + let registrationName = viewController.swinjectRegistrationName + + if let container = container.value as? _Resolver { + let option = SwinjectStoryboardOption(controllerType: type(of: viewController)) + typealias FactoryType = ((Resolver, Container.Controller, Arg1, Arg2, Arg3)) -> Any + let _ = container._resolve(name: registrationName, option: option) { (factory: FactoryType) in factory((self.container.value, viewController, arg1, arg2, arg3)) as Any } as Container.Controller? + } else { + fatalError("A type conforming Resolver protocol must conform _Resolver protocol too.") + } + + for child in viewController.children { + injectDependency(to: child) + } + } + + //MARK: - instantiateViewController with Args + + public func instantiateViewController(withIdentifier identifier: String, + arg: Arg) -> UIViewController { + let viewController = loadViewController(with: identifier) + injectDependency(to: viewController, arg: arg) + return viewController + } + + public func instantiateViewController(withIdentifier identifier: String, + arg1: Arg1, arg2: Arg2) -> UIViewController { + let viewController = loadViewController(with: identifier) + injectDependency(to: viewController, arg1: arg1, arg2: arg2) + return viewController + } + + public func instantiateViewController(withIdentifier identifier: String, + arg1: Arg1, arg2: Arg2, arg3: Arg3) -> UIViewController { + let viewController = loadViewController(with: identifier) + injectDependency(to: viewController, arg1: arg1, arg2: arg2, arg3: arg3) + return viewController + } + + private func loadViewController(with identifier: String) -> UIViewController { + SwinjectStoryboard.pushInstantiatingStoryboard(self) + let viewController = super.instantiateViewController(withIdentifier: identifier) + SwinjectStoryboard.popInstantiatingStoryboard() + return viewController + } + + #endif + +} diff --git a/Sources/SwinjectStoryboardExtensions.swift b/Sources/SwinjectStoryboardExtensions.swift new file mode 100644 index 0000000..796df8d --- /dev/null +++ b/Sources/SwinjectStoryboardExtensions.swift @@ -0,0 +1,61 @@ +// +// SwinjectStoryboardExtensions.swift +// SwinjectStoryboard +// +// Created by Malkevych Bohdan on 10.08.17. +// Copyright © 2017 Swinject Contributors. All rights reserved. +// + +import Swinject + +#if os(iOS) || os(OSX) || os(tvOS) + extension Container { + /// Adds a registration of the specified view or window controller that is configured in a storyboard. + /// + /// - Note: Do NOT explicitly resolve the controller registered by this method. + /// The controller is intended to be resolved by `SwinjectStoryboard` implicitly. + /// + /// - Parameters: + /// - controllerType: The controller type to register as a service type. + /// The type is `UIViewController` in iOS, `NSViewController` or `NSWindowController` in OS X. + /// - name: A registration name, which is used to differenciate from other registrations + /// that have the same view or window controller type. + /// - initCompleted: A closure to specifiy how the dependencies of the view or window controller are injected. + /// It is invoked by the `Container` when the view or window controller is instantiated by `SwinjectStoryboard`. + + public func storyboardInitCompletedArg(_ controllerType: C.Type, + name: String? = nil, initCompleted: @escaping (Resolver, C, Arg) -> ()) { + let factory = { (r: Resolver, c: Controller, arg: Arg) -> Container.Controller in + initCompleted(r, c as! C, arg) + return c + } + + let option = SwinjectStoryboardOption(controllerType: controllerType) + _register(Controller.self, factory: factory, name: name, option: option) + } + + public func storyboardInitCompletedArgs(_ controllerType: C.Type, + name: String? = nil, + initCompleted: @escaping (Resolver, C, Arg1, Arg2) -> ()) { + let factory = { (r: Resolver, c: Controller, arg1: Arg1, arg2: Arg2) -> Container.Controller in + initCompleted(r, c as! C, arg1, arg2) + return c + } + + let option = SwinjectStoryboardOption(controllerType: controllerType) + _register(Controller.self, factory: factory, name: name, option: option) + } + + public func storyboardInitCompletedArgs(_ controllerType: C.Type, + name: String? = nil, + initCompleted: @escaping (Resolver, C, Arg1, Arg2, Arg3) -> ()) { + let factory = { (r: Resolver, c: Controller, arg1: Arg1, arg2: Arg2, arg3: Arg3) -> Container.Controller in + initCompleted(r, c as! C, arg1, arg2, arg3) + return c + } + + let option = SwinjectStoryboardOption(controllerType: controllerType) + _register(Controller.self, factory: factory, name: name, option: option) + } + } +#endif diff --git a/SwinjectStoryboard.podspec b/SwinjectStoryboard.podspec index 7b82ac0..6a9a348 100644 --- a/SwinjectStoryboard.podspec +++ b/SwinjectStoryboard.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.homepage = "https://github.com/Swinject/SwinjectStoryboard" s.license = 'MIT' s.author = 'Swinject Contributors' - s.source = { :git => "https://github.com/Swinject/SwinjectStoryboard.git", :tag => s.version.to_s } + s.source = { :git => "https://github.com/SeductiveMobile/SwinjectStoryboard.git", :tag => s.version.to_s } core_files = 'Sources/*.{swift,m,h}' s.ios.source_files = core_files, 'Sources/iOS-tvOS/*.{swift,h,m}' diff --git a/SwinjectStoryboard.xcodeproj/project.pbxproj b/SwinjectStoryboard.xcodeproj/project.pbxproj index 9412ac8..ccd42e7 100644 --- a/SwinjectStoryboard.xcodeproj/project.pbxproj +++ b/SwinjectStoryboard.xcodeproj/project.pbxproj @@ -7,6 +7,18 @@ objects = { /* Begin PBXBuildFile section */ + 55640989210FCFD600AFFA8F /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55640987210FCFCC00AFFA8F /* Swinject.framework */; }; + 5564098D21104F6200AFFA8F /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098B21104F6200AFFA8F /* Quick.framework */; }; + 5564098E21104F6200AFFA8F /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098C21104F6200AFFA8F /* Nimble.framework */; }; + 5564098F2110658E00AFFA8F /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098C21104F6200AFFA8F /* Nimble.framework */; }; + 556409902110658E00AFFA8F /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098B21104F6200AFFA8F /* Quick.framework */; }; + 556409912110658E00AFFA8F /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55640987210FCFCC00AFFA8F /* Swinject.framework */; }; + 556409922110664700AFFA8F /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098C21104F6200AFFA8F /* Nimble.framework */; }; + 556409932110664800AFFA8F /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098B21104F6200AFFA8F /* Quick.framework */; }; + 556409942110664800AFFA8F /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55640987210FCFCC00AFFA8F /* Swinject.framework */; }; + 556409952110664E00AFFA8F /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098C21104F6200AFFA8F /* Nimble.framework */; }; + 556409962110664E00AFFA8F /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5564098B21104F6200AFFA8F /* Quick.framework */; }; + 556409972110664E00AFFA8F /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55640987210FCFCC00AFFA8F /* Swinject.framework */; }; 983DFEA51CDB410D00D39731 /* Container+SwinjectStoryboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983DFE9F1CDB410D00D39731 /* Container+SwinjectStoryboard.swift */; }; 983DFEA61CDB410D00D39731 /* Container+SwinjectStoryboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983DFE9F1CDB410D00D39731 /* Container+SwinjectStoryboard.swift */; }; 983DFEA71CDB410D00D39731 /* Container+SwinjectStoryboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983DFE9F1CDB410D00D39731 /* Container+SwinjectStoryboard.swift */; }; @@ -75,6 +87,9 @@ 98978E6A1DFC354B0046B966 /* UnavailableItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98978E671DFC354B0046B966 /* UnavailableItems.swift */; }; 98D562821CDB173500DECDC0 /* SwinjectStoryboard.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D562781CDB173500DECDC0 /* SwinjectStoryboard.framework */; }; 98D5629E1CDB19AB00DECDC0 /* SwinjectStoryboard.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D562941CDB19AB00DECDC0 /* SwinjectStoryboard.framework */; }; + B92E951F1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B92E951E1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift */; }; + B92E95201F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B92E951E1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift */; }; + B92E95211F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B92E951E1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift */; }; CD2C63AA1D7864840075BC14 /* SwinjectStoryboard+StoryboardReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2C63A91D7864840075BC14 /* SwinjectStoryboard+StoryboardReference.swift */; }; CD2C63AB1D7864840075BC14 /* SwinjectStoryboard+StoryboardReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD2C63A91D7864840075BC14 /* SwinjectStoryboard+StoryboardReference.swift */; }; CD2C63AD1D786C1F0075BC14 /* RelationshipReference1.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD2C63AC1D786C1F0075BC14 /* RelationshipReference1.storyboard */; }; @@ -103,24 +118,6 @@ CD6073911EBB3E8C00BE2167 /* Storyboard1.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD6073901EBB3E8C00BE2167 /* Storyboard1.storyboard */; }; CD6073931EBB3F1400BE2167 /* RelationshipReference2.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD6073921EBB3F1400BE2167 /* RelationshipReference2.storyboard */; }; CD6073951EBB3F6200BE2167 /* RelationshipReference1.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD6073941EBB3F6200BE2167 /* RelationshipReference1.storyboard */; }; - CDA864931EA9F17A00293FEC /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864921EA9F17A00293FEC /* Swinject.framework */; }; - CDA864951EA9F19400293FEC /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864941EA9F19400293FEC /* Swinject.framework */; }; - CDA864971EA9F1A000293FEC /* Swinject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864961EA9F1A000293FEC /* Swinject.framework */; }; - CDA8649A1EA9F1B600293FEC /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864981EA9F1B600293FEC /* Nimble.framework */; }; - CDA8649B1EA9F1B600293FEC /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864991EA9F1B600293FEC /* Quick.framework */; }; - CDA864A41EA9F22900293FEC /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864981EA9F1B600293FEC /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864A51EA9F22900293FEC /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864991EA9F1B600293FEC /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864A81EA9F23200293FEC /* Swinject.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864921EA9F17A00293FEC /* Swinject.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864AB1EA9F25C00293FEC /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864AA1EA9F25C00293FEC /* Quick.framework */; }; - CDA864AE1EA9F27100293FEC /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864AA1EA9F25C00293FEC /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864B01EA9F27200293FEC /* Swinject.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864941EA9F19400293FEC /* Swinject.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864B21EA9F28E00293FEC /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864B11EA9F28E00293FEC /* Nimble.framework */; }; - CDA864B31EA9F29100293FEC /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864B11EA9F28E00293FEC /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864B61EA9F29E00293FEC /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864B41EA9F29E00293FEC /* Nimble.framework */; }; - CDA864B71EA9F29E00293FEC /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA864B51EA9F29E00293FEC /* Quick.framework */; }; - CDA864B91EA9F2A600293FEC /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864B41EA9F29E00293FEC /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864BA1EA9F2A600293FEC /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864B51EA9F29E00293FEC /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CDA864BB1EA9F2AA00293FEC /* Swinject.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CDA864961EA9F1A000293FEC /* Swinject.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; FF492DA61EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m in Sources */ = {isa = PBXBuildFile; fileRef = FF492DA21EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m */; }; FF492DA71EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m in Sources */ = {isa = PBXBuildFile; fileRef = FF492DA21EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m */; }; FF492DA81EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m in Sources */ = {isa = PBXBuildFile; fileRef = FF492DA21EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m */; }; @@ -166,9 +163,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - CDA864A41EA9F22900293FEC /* Nimble.framework in CopyFiles */, - CDA864A51EA9F22900293FEC /* Quick.framework in CopyFiles */, - CDA864A81EA9F23200293FEC /* Swinject.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -178,9 +172,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - CDA864B31EA9F29100293FEC /* Nimble.framework in CopyFiles */, - CDA864AE1EA9F27100293FEC /* Quick.framework in CopyFiles */, - CDA864B01EA9F27200293FEC /* Swinject.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -190,15 +181,15 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - CDA864B91EA9F2A600293FEC /* Nimble.framework in CopyFiles */, - CDA864BA1EA9F2A600293FEC /* Quick.framework in CopyFiles */, - CDA864BB1EA9F2AA00293FEC /* Swinject.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 55640987210FCFCC00AFFA8F /* Swinject.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Swinject.framework; path = Carthage/Build/iOS/Swinject.framework; sourceTree = ""; }; + 5564098B21104F6200AFFA8F /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/iOS/Quick.framework; sourceTree = ""; }; + 5564098C21104F6200AFFA8F /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = ""; }; 983DFE9F1CDB410D00D39731 /* Container+SwinjectStoryboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Container+SwinjectStoryboard.swift"; sourceTree = ""; }; 983DFEA11CDB410D00D39731 /* SwinjectStoryboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwinjectStoryboard.swift; sourceTree = ""; }; 983DFEA21CDB410D00D39731 /* SwinjectStoryboardOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwinjectStoryboardOption.swift; sourceTree = ""; }; @@ -258,6 +249,7 @@ 98D562CA1CDB1E8800DECDC0 /* tvOS-Base.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "tvOS-Base.xcconfig"; sourceTree = ""; }; 98D562CB1CDB1E8800DECDC0 /* tvOS-Framework.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "tvOS-Framework.xcconfig"; sourceTree = ""; }; 98D562CC1CDB1E8800DECDC0 /* tvOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "tvOS-StaticLibrary.xcconfig"; sourceTree = ""; }; + B92E951E1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwinjectStoryboardExtensions.swift; sourceTree = ""; }; CD2C63A91D7864840075BC14 /* SwinjectStoryboard+StoryboardReference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwinjectStoryboard+StoryboardReference.swift"; sourceTree = ""; }; CD2C63AC1D786C1F0075BC14 /* RelationshipReference1.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = RelationshipReference1.storyboard; sourceTree = ""; }; CD2C63AE1D786CD70075BC14 /* RelationshipReference2.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = RelationshipReference2.storyboard; sourceTree = ""; }; @@ -281,15 +273,6 @@ CD6073901EBB3E8C00BE2167 /* Storyboard1.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard1.storyboard; sourceTree = ""; }; CD6073921EBB3F1400BE2167 /* RelationshipReference2.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = RelationshipReference2.storyboard; sourceTree = ""; }; CD6073941EBB3F6200BE2167 /* RelationshipReference1.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = RelationshipReference1.storyboard; sourceTree = ""; }; - CDA864921EA9F17A00293FEC /* Swinject.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Swinject.framework; path = Carthage/Build/iOS/Swinject.framework; sourceTree = ""; }; - CDA864941EA9F19400293FEC /* Swinject.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Swinject.framework; path = Carthage/Build/Mac/Swinject.framework; sourceTree = ""; }; - CDA864961EA9F1A000293FEC /* Swinject.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Swinject.framework; path = Carthage/Build/tvOS/Swinject.framework; sourceTree = ""; }; - CDA864981EA9F1B600293FEC /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = ""; }; - CDA864991EA9F1B600293FEC /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/iOS/Quick.framework; sourceTree = ""; }; - CDA864AA1EA9F25C00293FEC /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/Mac/Quick.framework; sourceTree = ""; }; - CDA864B11EA9F28E00293FEC /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/Mac/Nimble.framework; sourceTree = ""; }; - CDA864B41EA9F29E00293FEC /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/tvOS/Nimble.framework; sourceTree = ""; }; - CDA864B51EA9F29E00293FEC /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/tvOS/Quick.framework; sourceTree = ""; }; FF492DA21EDA490F0081A4A7 /* SwinjectStoryboard+SetUp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SwinjectStoryboard+SetUp.m"; sourceTree = ""; }; FF492DAF1EDA65D90081A4A7 /* NSStoryboard+Swizzling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSStoryboard+Swizzling.h"; sourceTree = ""; }; FF492DB01EDA65D90081A4A7 /* NSStoryboard+Swizzling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSStoryboard+Swizzling.m"; sourceTree = ""; }; @@ -303,7 +286,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDA864931EA9F17A00293FEC /* Swinject.framework in Frameworks */, + 5564098E21104F6200AFFA8F /* Nimble.framework in Frameworks */, + 5564098D21104F6200AFFA8F /* Quick.framework in Frameworks */, + 55640989210FCFD600AFFA8F /* Swinject.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -311,9 +296,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDA8649A1EA9F1B600293FEC /* Nimble.framework in Frameworks */, - CDA8649B1EA9F1B600293FEC /* Quick.framework in Frameworks */, 985904111CDB0AA700275E4A /* SwinjectStoryboard.framework in Frameworks */, + 5564098F2110658E00AFFA8F /* Nimble.framework in Frameworks */, + 556409902110658E00AFFA8F /* Quick.framework in Frameworks */, + 556409912110658E00AFFA8F /* Swinject.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -321,7 +307,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDA864951EA9F19400293FEC /* Swinject.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -329,9 +314,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDA864B21EA9F28E00293FEC /* Nimble.framework in Frameworks */, - CDA864AB1EA9F25C00293FEC /* Quick.framework in Frameworks */, 98D562821CDB173500DECDC0 /* SwinjectStoryboard.framework in Frameworks */, + 556409922110664700AFFA8F /* Nimble.framework in Frameworks */, + 556409932110664800AFFA8F /* Quick.framework in Frameworks */, + 556409942110664800AFFA8F /* Swinject.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -339,7 +325,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDA864971EA9F1A000293FEC /* Swinject.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -347,9 +332,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CDA864B61EA9F29E00293FEC /* Nimble.framework in Frameworks */, - CDA864B71EA9F29E00293FEC /* Quick.framework in Frameworks */, 98D5629E1CDB19AB00DECDC0 /* SwinjectStoryboard.framework in Frameworks */, + 556409952110664E00AFFA8F /* Nimble.framework in Frameworks */, + 556409962110664E00AFFA8F /* Quick.framework in Frameworks */, + 556409972110664E00AFFA8F /* Swinject.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -470,6 +456,7 @@ 98978E671DFC354B0046B966 /* UnavailableItems.swift */, 985904091CDB0AA700275E4A /* SwinjectStoryboard.h */, 9859040B1CDB0AA700275E4A /* Info.plist */, + B92E951E1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift */, ); path = Sources; sourceTree = ""; @@ -622,15 +609,9 @@ CDA864911EA9F17900293FEC /* Frameworks */ = { isa = PBXGroup; children = ( - CDA864B41EA9F29E00293FEC /* Nimble.framework */, - CDA864B51EA9F29E00293FEC /* Quick.framework */, - CDA864B11EA9F28E00293FEC /* Nimble.framework */, - CDA864AA1EA9F25C00293FEC /* Quick.framework */, - CDA864981EA9F1B600293FEC /* Nimble.framework */, - CDA864991EA9F1B600293FEC /* Quick.framework */, - CDA864961EA9F1A000293FEC /* Swinject.framework */, - CDA864941EA9F19400293FEC /* Swinject.framework */, - CDA864921EA9F17A00293FEC /* Swinject.framework */, + 5564098C21104F6200AFFA8F /* Nimble.framework */, + 5564098B21104F6200AFFA8F /* Quick.framework */, + 55640987210FCFCC00AFFA8F /* Swinject.framework */, ); name = Frameworks; sourceTree = ""; @@ -682,6 +663,7 @@ 985904021CDB0AA700275E4A /* Frameworks */, 985904031CDB0AA700275E4A /* Headers */, 985904041CDB0AA700275E4A /* Resources */, + 5564098A210FCFDF00AFFA8F /* ShellScript */, ); buildRules = ( ); @@ -913,6 +895,28 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 5564098A210FCFDF00AFFA8F /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/Carthage/Build/iOS/Swinject.framework", + "$(SRCROOT)/Carthage/Build/iOS/Quick.framework", + "$(SRCROOT)/Carthage/Build/iOS/Nimble.framework", + ); + outputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Swinject.framework", + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Quick.framework", + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Nimble.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/usr/local/bin/carthage copy-frameworks"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 985904011CDB0AA700275E4A /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -930,6 +934,7 @@ 983DFEBE1CDB414900D39731 /* _SwinjectStoryboardBase.m in Sources */, FF492DB71EDA65E30081A4A7 /* UIStoryboard+Swizzling.m in Sources */, 983DFEB41CDB410D00D39731 /* ViewController+Swinject.swift in Sources */, + B92E951F1F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -967,6 +972,7 @@ 983DFF0C1CDB440800D39731 /* Box.swift in Sources */, 983DFEC41CDB415300D39731 /* _SwinjectStoryboardBase.m in Sources */, 983DFEB51CDB410D00D39731 /* ViewController+Swinject.swift in Sources */, + B92E95201F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1005,6 +1011,7 @@ 983DFEBF1CDB414900D39731 /* _SwinjectStoryboardBase.m in Sources */, FF492DB81EDA65E30081A4A7 /* UIStoryboard+Swizzling.m in Sources */, 983DFEB61CDB410D00D39731 /* ViewController+Swinject.swift in Sources */, + B92E95211F3CCEAD0051FD3E /* SwinjectStoryboardExtensions.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1101,10 +1108,12 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); + GCC_TREAT_WARNINGS_AS_ERRORS = NO; INFOPLIST_FILE = Sources/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboard"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_TREAT_WARNINGS_AS_ERRORS = NO; }; name = Debug; }; @@ -1120,9 +1129,11 @@ "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", ); + GCC_TREAT_WARNINGS_AS_ERRORS = NO; INFOPLIST_FILE = Sources/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboard"; + SWIFT_TREAT_WARNINGS_AS_ERRORS = NO; }; name = Release; }; @@ -1136,6 +1147,7 @@ ); INFOPLIST_FILE = Tests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)"; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboardTests"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; @@ -1151,6 +1163,7 @@ ); INFOPLIST_FILE = Tests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)"; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboardTests"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; @@ -1200,8 +1213,10 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks $(FRAMEWORK_SEARCH_PATHS)"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboardTests"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; @@ -1215,8 +1230,10 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/Mac", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks $(FRAMEWORK_SEARCH_PATHS)"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboardTests"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; @@ -1272,8 +1289,10 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/tvOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)"; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboardTests"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; }; @@ -1287,8 +1306,10 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/tvOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)"; PRODUCT_BUNDLE_IDENTIFIER = "com.el-eleven.SwinjectStoryboardTests"; PRODUCT_NAME = "$(PROJECT_NAME)Tests"; };