diff --git a/CHANGELOG.md b/CHANGELOG.md index 013c5a2..4218da1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ * Fixed `swiftlint` warnings in generated color extensions. [Roman Laitarenko](https://github.com/evil159) [#32](https://github.com/SwiftGen/templates/pull/32) +* The storyboards macOS swift3 template was missing the "current target" module ignore code. + [@djbe](https://github.com/djbe) + [#27](https://github.com/SwiftGen/templates/issues/27) ### Breaking Changes diff --git a/Contexts/Storyboards-macOS/all.plist b/Contexts/Storyboards-macOS/all.plist index 491ea9e..5f167c1 100644 --- a/Contexts/Storyboards-macOS/all.plist +++ b/Contexts/Storyboards-macOS/all.plist @@ -4,10 +4,12 @@ extraImports + FadeSegue PrefsWindowController modules + FadeSegue PrefsWindowController param @@ -159,9 +161,7 @@ customClass - - customModule - + FadeSegue identifier public diff --git a/Contexts/Storyboards-macOS/customname.plist b/Contexts/Storyboards-macOS/customname.plist index 1375b18..2d1cd1d 100644 --- a/Contexts/Storyboards-macOS/customname.plist +++ b/Contexts/Storyboards-macOS/customname.plist @@ -4,10 +4,12 @@ extraImports + FadeSegue PrefsWindowController modules + FadeSegue PrefsWindowController param @@ -159,9 +161,7 @@ customClass - - customModule - + FadeSegue identifier public diff --git a/Contexts/Storyboards-macOS/messages.plist b/Contexts/Storyboards-macOS/messages.plist index 91a3863..b646ce6 100644 --- a/Contexts/Storyboards-macOS/messages.plist +++ b/Contexts/Storyboards-macOS/messages.plist @@ -3,9 +3,13 @@ extraImports - + + FadeSegue + modules - + + FadeSegue + param sceneEnumName @@ -113,9 +117,7 @@ customClass - - customModule - + FadeSegue identifier public diff --git a/Fixtures/Storyboards-macOS/Message.storyboard b/Fixtures/Storyboards-macOS/Message.storyboard index eff504b..fd1a404 100644 --- a/Fixtures/Storyboards-macOS/Message.storyboard +++ b/Fixtures/Storyboards-macOS/Message.storyboard @@ -82,7 +82,7 @@ - + diff --git a/Fixtures/stub-env/Modules/FadeSegue.swift b/Fixtures/stub-env/Modules/FadeSegue.swift new file mode 100644 index 0000000..7632fe2 --- /dev/null +++ b/Fixtures/stub-env/Modules/FadeSegue.swift @@ -0,0 +1,4 @@ +import AppKit + +public class FadeSegue: NSStoryboardSegue { +} diff --git a/Rakefile b/Rakefile index f1fdf31..358f400 100644 --- a/Rakefile +++ b/Rakefile @@ -34,7 +34,7 @@ namespace :output do Utils.print_header 'Compile output modules' # macOS - modules = ['PrefsWindowController'] + modules = ['FadeSegue', 'PrefsWindowController'] modules.each do |m| Utils.print_info "Compiling module #{m}… (macos)" compile_module(m, :macosx, task) diff --git a/Tests/Expected/Storyboards-macOS/default-context-all-customname.swift b/Tests/Expected/Storyboards-macOS/default-context-all-customname.swift index b11dddb..1c9f6a2 100644 --- a/Tests/Expected/Storyboards-macOS/default-context-all-customname.swift +++ b/Tests/Expected/Storyboards-macOS/default-context-all-customname.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa +import FadeSegue import PrefsWindowController // swiftlint:disable file_length diff --git a/Tests/Expected/Storyboards-macOS/default-context-all-ignore-module.swift b/Tests/Expected/Storyboards-macOS/default-context-all-ignore-module.swift new file mode 100644 index 0000000..1778795 --- /dev/null +++ b/Tests/Expected/Storyboards-macOS/default-context-all-ignore-module.swift @@ -0,0 +1,171 @@ +// Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen + +import Foundation +import Cocoa +import PrefsWindowController + +// swiftlint:disable file_length +// swiftlint:disable line_length +// swiftlint:disable type_body_length + +protocol StoryboardSceneType { + static var storyboardName: String { get } +} + +extension StoryboardSceneType { + static func storyboard() -> NSStoryboard { + return NSStoryboard(name: self.storyboardName, bundle: NSBundle(forClass: BundleToken.self)) + } + + static func initialController() -> AnyObject { + guard let controller = storyboard().instantiateInitialController() + else { + fatalError("Failed to instantiate initialViewController for \(self.storyboardName)") + } + return controller + } +} + +extension StoryboardSceneType where Self: RawRepresentable, Self.RawValue == String { + func controller() -> AnyObject { + return Self.storyboard().instantiateControllerWithIdentifier(self.rawValue) + } + static func controller(identifier: Self) -> AnyObject { + return identifier.controller() + } +} + +protocol StoryboardSegueType: RawRepresentable { } + +extension NSWindowController { + func performSegue(segue: S, sender: AnyObject? = nil) { + performSegueWithIdentifier(segue.rawValue, sender: sender) + } +} + +extension NSViewController { + func performSegue(segue: S, sender: AnyObject? = nil) { + performSegueWithIdentifier(segue.rawValue, sender: sender) + } +} + +enum StoryboardScene { + enum AdditionalImport: String, StoryboardSceneType { + static let storyboardName = "AdditionalImport" + + case PrivateScene = "private" + static func instantiatePrivate() -> PrefsWindowController.DBPrefsWindowController { + guard let vc = StoryboardScene.AdditionalImport.PrivateScene.controller() as? PrefsWindowController.DBPrefsWindowController + else { + fatalError("ViewController 'private' is not of the expected class PrefsWindowController.DBPrefsWindowController.") + } + return vc + } + } + enum Anonymous: StoryboardSceneType { + static let storyboardName = "Anonymous" + } + enum Dependency: String, StoryboardSceneType { + static let storyboardName = "Dependency" + + case DependentScene = "Dependent" + static func instantiateDependent() -> NSViewController { + guard let vc = StoryboardScene.Dependency.DependentScene.controller() as? NSViewController + else { + fatalError("ViewController 'Dependent' is not of the expected class NSViewController.") + } + return vc + } + } + enum Message: String, StoryboardSceneType { + static let storyboardName = "Message" + + case MessageDetailsScene = "MessageDetails" + static func instantiateMessageDetails() -> NSViewController { + guard let vc = StoryboardScene.Message.MessageDetailsScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageDetails' is not of the expected class NSViewController.") + } + return vc + } + + case MessageListScene = "MessageList" + static func instantiateMessageList() -> NSViewController { + guard let vc = StoryboardScene.Message.MessageListScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageList' is not of the expected class NSViewController.") + } + return vc + } + + case MessageListFooterScene = "MessageListFooter" + static func instantiateMessageListFooter() -> NSViewController { + guard let vc = StoryboardScene.Message.MessageListFooterScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageListFooter' is not of the expected class NSViewController.") + } + return vc + } + + case MessagesTabScene = "MessagesTab" + static func instantiateMessagesTab() -> CustomTabViewController { + guard let vc = StoryboardScene.Message.MessagesTabScene.controller() as? CustomTabViewController + else { + fatalError("ViewController 'MessagesTab' is not of the expected class CustomTabViewController.") + } + return vc + } + + case SplitMessagesScene = "SplitMessages" + static func instantiateSplitMessages() -> NSSplitViewController { + guard let vc = StoryboardScene.Message.SplitMessagesScene.controller() as? NSSplitViewController + else { + fatalError("ViewController 'SplitMessages' is not of the expected class NSSplitViewController.") + } + return vc + } + + case WindowCtrlScene = "WindowCtrl" + static func instantiateWindowCtrl() -> NSWindowController { + guard let vc = StoryboardScene.Message.WindowCtrlScene.controller() as? NSWindowController + else { + fatalError("ViewController 'WindowCtrl' is not of the expected class NSWindowController.") + } + return vc + } + } + enum Placeholder: String, StoryboardSceneType { + static let storyboardName = "Placeholder" + + case DependentScene = "Dependent" + static func instantiateDependent() -> NSControllerPlaceholder { + guard let vc = StoryboardScene.Placeholder.DependentScene.controller() as? NSControllerPlaceholder + else { + fatalError("ViewController 'Dependent' is not of the expected class NSControllerPlaceholder.") + } + return vc + } + + case WindowScene = "Window" + static func instantiateWindow() -> NSWindowController { + guard let vc = StoryboardScene.Placeholder.WindowScene.controller() as? NSWindowController + else { + fatalError("ViewController 'Window' is not of the expected class NSWindowController.") + } + return vc + } + } +} + +enum StoryboardSegue { + enum Message: String, StoryboardSegueType { + case Embed + case Modal + case Popover + case Sheet + case Show + case Public = "public" + } +} + +private final class BundleToken {} diff --git a/Tests/Expected/Storyboards-macOS/default-context-all.swift b/Tests/Expected/Storyboards-macOS/default-context-all.swift index 1778795..2d9ca24 100644 --- a/Tests/Expected/Storyboards-macOS/default-context-all.swift +++ b/Tests/Expected/Storyboards-macOS/default-context-all.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa +import FadeSegue import PrefsWindowController // swiftlint:disable file_length diff --git a/Tests/Expected/Storyboards-macOS/lowercase-context-all-customname.swift b/Tests/Expected/Storyboards-macOS/lowercase-context-all-customname.swift index 41a0d05..e6e0e7c 100644 --- a/Tests/Expected/Storyboards-macOS/lowercase-context-all-customname.swift +++ b/Tests/Expected/Storyboards-macOS/lowercase-context-all-customname.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa +import FadeSegue import PrefsWindowController // swiftlint:disable file_length diff --git a/Tests/Expected/Storyboards-macOS/lowercase-context-all-ignore-module.swift b/Tests/Expected/Storyboards-macOS/lowercase-context-all-ignore-module.swift new file mode 100644 index 0000000..ed15336 --- /dev/null +++ b/Tests/Expected/Storyboards-macOS/lowercase-context-all-ignore-module.swift @@ -0,0 +1,171 @@ +// Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen + +import Foundation +import Cocoa +import PrefsWindowController + +// swiftlint:disable file_length +// swiftlint:disable line_length +// swiftlint:disable type_body_length + +protocol StoryboardSceneType { + static var storyboardName: String { get } +} + +extension StoryboardSceneType { + static func storyboard() -> NSStoryboard { + return NSStoryboard(name: self.storyboardName, bundle: NSBundle(forClass: BundleToken.self)) + } + + static func initialController() -> AnyObject { + guard let controller = storyboard().instantiateInitialController() + else { + fatalError("Failed to instantiate initialViewController for \(self.storyboardName)") + } + return controller + } +} + +extension StoryboardSceneType where Self: RawRepresentable, Self.RawValue == String { + func controller() -> AnyObject { + return Self.storyboard().instantiateControllerWithIdentifier(self.rawValue) + } + static func controller(identifier: Self) -> AnyObject { + return identifier.controller() + } +} + +protocol StoryboardSegueType: RawRepresentable { } + +extension NSWindowController { + func performSegue(segue: S, sender: AnyObject? = nil) { + performSegueWithIdentifier(segue.rawValue, sender: sender) + } +} + +extension NSViewController { + func performSegue(segue: S, sender: AnyObject? = nil) { + performSegueWithIdentifier(segue.rawValue, sender: sender) + } +} + +enum StoryboardScene { + enum AdditionalImport: String, StoryboardSceneType { + static let storyboardName = "AdditionalImport" + + case privateScene = "private" + static func instantiatePrivate() -> PrefsWindowController.DBPrefsWindowController { + guard let vc = StoryboardScene.AdditionalImport.privateScene.controller() as? PrefsWindowController.DBPrefsWindowController + else { + fatalError("ViewController 'private' is not of the expected class PrefsWindowController.DBPrefsWindowController.") + } + return vc + } + } + enum Anonymous: StoryboardSceneType { + static let storyboardName = "Anonymous" + } + enum Dependency: String, StoryboardSceneType { + static let storyboardName = "Dependency" + + case dependentScene = "Dependent" + static func instantiateDependent() -> NSViewController { + guard let vc = StoryboardScene.Dependency.dependentScene.controller() as? NSViewController + else { + fatalError("ViewController 'Dependent' is not of the expected class NSViewController.") + } + return vc + } + } + enum Message: String, StoryboardSceneType { + static let storyboardName = "Message" + + case messageDetailsScene = "MessageDetails" + static func instantiateMessageDetails() -> NSViewController { + guard let vc = StoryboardScene.Message.messageDetailsScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageDetails' is not of the expected class NSViewController.") + } + return vc + } + + case messageListScene = "MessageList" + static func instantiateMessageList() -> NSViewController { + guard let vc = StoryboardScene.Message.messageListScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageList' is not of the expected class NSViewController.") + } + return vc + } + + case messageListFooterScene = "MessageListFooter" + static func instantiateMessageListFooter() -> NSViewController { + guard let vc = StoryboardScene.Message.messageListFooterScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageListFooter' is not of the expected class NSViewController.") + } + return vc + } + + case messagesTabScene = "MessagesTab" + static func instantiateMessagesTab() -> CustomTabViewController { + guard let vc = StoryboardScene.Message.messagesTabScene.controller() as? CustomTabViewController + else { + fatalError("ViewController 'MessagesTab' is not of the expected class CustomTabViewController.") + } + return vc + } + + case splitMessagesScene = "SplitMessages" + static func instantiateSplitMessages() -> NSSplitViewController { + guard let vc = StoryboardScene.Message.splitMessagesScene.controller() as? NSSplitViewController + else { + fatalError("ViewController 'SplitMessages' is not of the expected class NSSplitViewController.") + } + return vc + } + + case windowCtrlScene = "WindowCtrl" + static func instantiateWindowCtrl() -> NSWindowController { + guard let vc = StoryboardScene.Message.windowCtrlScene.controller() as? NSWindowController + else { + fatalError("ViewController 'WindowCtrl' is not of the expected class NSWindowController.") + } + return vc + } + } + enum Placeholder: String, StoryboardSceneType { + static let storyboardName = "Placeholder" + + case dependentScene = "Dependent" + static func instantiateDependent() -> NSControllerPlaceholder { + guard let vc = StoryboardScene.Placeholder.dependentScene.controller() as? NSControllerPlaceholder + else { + fatalError("ViewController 'Dependent' is not of the expected class NSControllerPlaceholder.") + } + return vc + } + + case windowScene = "Window" + static func instantiateWindow() -> NSWindowController { + guard let vc = StoryboardScene.Placeholder.windowScene.controller() as? NSWindowController + else { + fatalError("ViewController 'Window' is not of the expected class NSWindowController.") + } + return vc + } + } +} + +enum StoryboardSegue { + enum Message: String, StoryboardSegueType { + case Embed + case Modal + case Popover + case Sheet + case Show + case Public = "public" + } +} + +private final class BundleToken {} diff --git a/Tests/Expected/Storyboards-macOS/lowercase-context-all.swift b/Tests/Expected/Storyboards-macOS/lowercase-context-all.swift index ed15336..24c665c 100644 --- a/Tests/Expected/Storyboards-macOS/lowercase-context-all.swift +++ b/Tests/Expected/Storyboards-macOS/lowercase-context-all.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa +import FadeSegue import PrefsWindowController // swiftlint:disable file_length diff --git a/Tests/Expected/Storyboards-macOS/swift3-context-all-customname.swift b/Tests/Expected/Storyboards-macOS/swift3-context-all-customname.swift index 4d18365..81ac903 100644 --- a/Tests/Expected/Storyboards-macOS/swift3-context-all-customname.swift +++ b/Tests/Expected/Storyboards-macOS/swift3-context-all-customname.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa +import FadeSegue import PrefsWindowController // swiftlint:disable file_length diff --git a/Tests/Expected/Storyboards-macOS/swift3-context-all-ignore-module.swift b/Tests/Expected/Storyboards-macOS/swift3-context-all-ignore-module.swift new file mode 100644 index 0000000..3e0dea3 --- /dev/null +++ b/Tests/Expected/Storyboards-macOS/swift3-context-all-ignore-module.swift @@ -0,0 +1,171 @@ +// Generated using SwiftGen, by O.Halligon — https://github.com/SwiftGen/SwiftGen + +import Foundation +import Cocoa +import PrefsWindowController + +// swiftlint:disable file_length +// swiftlint:disable line_length +// swiftlint:disable type_body_length + +protocol StoryboardSceneType { + static var storyboardName: String { get } +} + +extension StoryboardSceneType { + static func storyboard() -> NSStoryboard { + return NSStoryboard(name: self.storyboardName, bundle: Bundle(for: BundleToken.self)) + } + + static func initialController() -> Any { + guard let controller = storyboard().instantiateInitialController() + else { + fatalError("Failed to instantiate initialViewController for \(self.storyboardName)") + } + return controller + } +} + +extension StoryboardSceneType where Self: RawRepresentable, Self.RawValue == String { + func controller() -> Any { + return Self.storyboard().instantiateController(withIdentifier: self.rawValue) + } + static func controller(identifier: Self) -> Any { + return identifier.controller() + } +} + +protocol StoryboardSegueType: RawRepresentable { } + +extension NSWindowController { + func performSegue(segue: S, sender: Any? = nil) where S.RawValue == String { + performSegue(withIdentifier: segue.rawValue, sender: sender) + } +} + +extension NSViewController { + func performSegue(segue: S, sender: Any? = nil) where S.RawValue == String { + performSegue(withIdentifier: segue.rawValue, sender: sender) + } +} + +enum StoryboardScene { + enum AdditionalImport: String, StoryboardSceneType { + static let storyboardName = "AdditionalImport" + + case privateScene = "private" + static func instantiatePrivate() -> PrefsWindowController.DBPrefsWindowController { + guard let vc = StoryboardScene.AdditionalImport.privateScene.controller() as? PrefsWindowController.DBPrefsWindowController + else { + fatalError("ViewController 'private' is not of the expected class PrefsWindowController.DBPrefsWindowController.") + } + return vc + } + } + enum Anonymous: StoryboardSceneType { + static let storyboardName = "Anonymous" + } + enum Dependency: String, StoryboardSceneType { + static let storyboardName = "Dependency" + + case dependentScene = "Dependent" + static func instantiateDependent() -> NSViewController { + guard let vc = StoryboardScene.Dependency.dependentScene.controller() as? NSViewController + else { + fatalError("ViewController 'Dependent' is not of the expected class NSViewController.") + } + return vc + } + } + enum Message: String, StoryboardSceneType { + static let storyboardName = "Message" + + case messageDetailsScene = "MessageDetails" + static func instantiateMessageDetails() -> NSViewController { + guard let vc = StoryboardScene.Message.messageDetailsScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageDetails' is not of the expected class NSViewController.") + } + return vc + } + + case messageListScene = "MessageList" + static func instantiateMessageList() -> NSViewController { + guard let vc = StoryboardScene.Message.messageListScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageList' is not of the expected class NSViewController.") + } + return vc + } + + case messageListFooterScene = "MessageListFooter" + static func instantiateMessageListFooter() -> NSViewController { + guard let vc = StoryboardScene.Message.messageListFooterScene.controller() as? NSViewController + else { + fatalError("ViewController 'MessageListFooter' is not of the expected class NSViewController.") + } + return vc + } + + case messagesTabScene = "MessagesTab" + static func instantiateMessagesTab() -> CustomTabViewController { + guard let vc = StoryboardScene.Message.messagesTabScene.controller() as? CustomTabViewController + else { + fatalError("ViewController 'MessagesTab' is not of the expected class CustomTabViewController.") + } + return vc + } + + case splitMessagesScene = "SplitMessages" + static func instantiateSplitMessages() -> NSSplitViewController { + guard let vc = StoryboardScene.Message.splitMessagesScene.controller() as? NSSplitViewController + else { + fatalError("ViewController 'SplitMessages' is not of the expected class NSSplitViewController.") + } + return vc + } + + case windowCtrlScene = "WindowCtrl" + static func instantiateWindowCtrl() -> NSWindowController { + guard let vc = StoryboardScene.Message.windowCtrlScene.controller() as? NSWindowController + else { + fatalError("ViewController 'WindowCtrl' is not of the expected class NSWindowController.") + } + return vc + } + } + enum Placeholder: String, StoryboardSceneType { + static let storyboardName = "Placeholder" + + case dependentScene = "Dependent" + static func instantiateDependent() -> NSControllerPlaceholder { + guard let vc = StoryboardScene.Placeholder.dependentScene.controller() as? NSControllerPlaceholder + else { + fatalError("ViewController 'Dependent' is not of the expected class NSControllerPlaceholder.") + } + return vc + } + + case windowScene = "Window" + static func instantiateWindow() -> NSWindowController { + guard let vc = StoryboardScene.Placeholder.windowScene.controller() as? NSWindowController + else { + fatalError("ViewController 'Window' is not of the expected class NSWindowController.") + } + return vc + } + } +} + +enum StoryboardSegue { + enum Message: String, StoryboardSegueType { + case embed = "Embed" + case modal = "Modal" + case popover = "Popover" + case sheet = "Sheet" + case show = "Show" + case `public` + } +} + +private final class BundleToken {} diff --git a/Tests/Expected/Storyboards-macOS/swift3-context-all.swift b/Tests/Expected/Storyboards-macOS/swift3-context-all.swift index 3e0dea3..20efa6d 100644 --- a/Tests/Expected/Storyboards-macOS/swift3-context-all.swift +++ b/Tests/Expected/Storyboards-macOS/swift3-context-all.swift @@ -2,6 +2,7 @@ import Foundation import Cocoa +import FadeSegue import PrefsWindowController // swiftlint:disable file_length diff --git a/Tests/TemplatesTests/StoryboardsMacOSTests.swift b/Tests/TemplatesTests/StoryboardsMacOSTests.swift index 3e19727..a35fda7 100644 --- a/Tests/TemplatesTests/StoryboardsMacOSTests.swift +++ b/Tests/TemplatesTests/StoryboardsMacOSTests.swift @@ -6,24 +6,43 @@ import StencilSwiftKit import XCTest +import StencilSwiftKit class StoryboardsMacOSTests: XCTestCase { enum Contexts { static let all = ["empty", "all"] } - // generate variations to test customname generation + // generate variations to test target module matching and custom enum names let variations: VariationGenerator = { name, context in guard name == "all" else { return [(context: context, suffix: "")] } - return [ - (context: context, - suffix: ""), - (context: try StencilContext.enrich(context: context, - parameters: ["sceneEnumName=XCTStoryboardsScene", - "segueEnumName=XCTStoryboardsSegue"]), - suffix: "-customname") - ] + do { + return [ + (context: context, + suffix: ""), + (context: try StencilContext.enrich(context: context, + parameters: ["sceneEnumName=XCTStoryboardsScene", + "segueEnumName=XCTStoryboardsSegue"]), + suffix: "-customname"), + (context: try StencilContext.enrich(context: context, + parameters: [], + environment: ["PRODUCT_MODULE_NAME": "Test"]), + suffix: ""), + (context: try StencilContext.enrich(context: context, + parameters: [], + environment: ["PRODUCT_MODULE_NAME": "FadeSegue"]), + suffix: "-ignore-module"), + (context: try StencilContext.enrich(context: context, + parameters: ["module=Test"]), + suffix: ""), + (context: try StencilContext.enrich(context: context, + parameters: ["module=FadeSegue"]), + suffix: "-ignore-module") + ] + } catch { + fatalError("Unable to create context variations") + } } func testDefault() { diff --git a/templates/storyboards-osx-swift3.stencil b/templates/storyboards-osx-swift3.stencil index dda814e..0ff99cb 100644 --- a/templates/storyboards-osx-swift3.stencil +++ b/templates/storyboards-osx-swift3.stencil @@ -4,7 +4,9 @@ import Foundation import Cocoa {% for module in modules %} +{% if module != env.PRODUCT_MODULE_NAME and module != param.module %} import {{module}} +{% endif %} {% endfor %} {% if storyboards %}