├── Assets ├── facebook_profile_image.png └── logo_transparent.png ├── Classes ├── Subscribtion.swift ├── TopicEvent.swift └── TopicEventBus.swift ├── ExampleProject ├── ExampleProject.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── matancohen.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── matancohen.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── ExampleProject.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── matancohen.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist ├── ExampleProject │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Events │ │ └── ConversationChangedEvent.swift │ ├── Info.plist │ └── ViewController.swift ├── ExampleProjectTests │ └── Info.plist ├── ExampleProjectUITests │ ├── ExampleProjectUITests.swift │ └── Info.plist ├── Podfile ├── Podfile.lock └── Pods │ ├── Local Podspecs │ └── TopicEventBus.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── matancohen.xcuserdatad │ │ └── xcschemes │ │ ├── Pods-ExampleProject.xcscheme │ │ ├── Pods-ExampleProjectTests.xcscheme │ │ ├── Pods-ExampleProjectUITests.xcscheme │ │ ├── TopicEventBus.xcscheme │ │ └── xcschememanagement.plist │ └── Target Support Files │ ├── Pods-ExampleProject │ ├── Info.plist │ ├── Pods-ExampleProject-acknowledgements.markdown │ ├── Pods-ExampleProject-acknowledgements.plist │ ├── Pods-ExampleProject-dummy.m │ ├── Pods-ExampleProject-frameworks.sh │ ├── Pods-ExampleProject-resources.sh │ ├── Pods-ExampleProject-umbrella.h │ ├── Pods-ExampleProject.debug.xcconfig │ ├── Pods-ExampleProject.modulemap │ └── Pods-ExampleProject.release.xcconfig │ ├── Pods-ExampleProjectTests │ ├── Info.plist │ ├── Pods-ExampleProjectTests-acknowledgements.markdown │ ├── Pods-ExampleProjectTests-acknowledgements.plist │ ├── Pods-ExampleProjectTests-dummy.m │ ├── Pods-ExampleProjectTests-frameworks.sh │ ├── Pods-ExampleProjectTests-resources.sh │ ├── Pods-ExampleProjectTests-umbrella.h │ ├── Pods-ExampleProjectTests.debug.xcconfig │ ├── Pods-ExampleProjectTests.modulemap │ └── Pods-ExampleProjectTests.release.xcconfig │ ├── Pods-ExampleProjectUITests │ ├── Info.plist │ ├── Pods-ExampleProjectUITests-acknowledgements.markdown │ ├── Pods-ExampleProjectUITests-acknowledgements.plist │ ├── Pods-ExampleProjectUITests-dummy.m │ ├── Pods-ExampleProjectUITests-frameworks.sh │ ├── Pods-ExampleProjectUITests-resources.sh │ ├── Pods-ExampleProjectUITests-umbrella.h │ ├── Pods-ExampleProjectUITests.debug.xcconfig │ ├── Pods-ExampleProjectUITests.modulemap │ └── Pods-ExampleProjectUITests.release.xcconfig │ └── TopicEventBus │ ├── Info.plist │ ├── TopicEventBus-dummy.m │ ├── TopicEventBus-prefix.pch │ ├── TopicEventBus-umbrella.h │ ├── TopicEventBus.modulemap │ └── TopicEventBus.xcconfig ├── LICENSE ├── README.md ├── Tests └── TopicEventBusTests.swift └── TopicEventBus.podspec /Assets/facebook_profile_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/TopicEventBus/e0ac641b9159bfbad5a58c939783aa115a4198e5/Assets/facebook_profile_image.png -------------------------------------------------------------------------------- /Assets/logo_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/TopicEventBus/e0ac641b9159bfbad5a58c939783aa115a4198e5/Assets/logo_transparent.png -------------------------------------------------------------------------------- /Classes/Subscribtion.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Subscribtion.swift 3 | // TopicEventBus 4 | // 5 | // Created by Matan Cohen on 8/3/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | class Subscription: Listener { 11 | let key: String? 12 | var subscriber: ((Any) -> Void)? 13 | init(key: String?, subscriber: @escaping (Any) -> Void) { 14 | self.key = key 15 | self.subscriber = subscriber 16 | } 17 | func stop() { 18 | subscriber = nil 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Classes/TopicEvent.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BusEvent.swift 3 | // TopicEventBus 4 | // 5 | // Created by Matan Cohen on 8/2/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | open class TopicEvent { 12 | open var key: String? = nil 13 | public init() {} 14 | } 15 | -------------------------------------------------------------------------------- /Classes/TopicEventBus.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TopicEventBus.swift 3 | // TopicEventBus 4 | // 5 | // Created by Matan Cohen on 8/2/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol TopicEventBusType { 12 | func fire(event: TopicEvent) 13 | func subscribe(callback: @escaping (T) -> Void) -> Listener 14 | func subscribe(topic: String?, callback: @escaping (T) -> Void) -> Listener 15 | func terminate() 16 | } 17 | 18 | public protocol Listener { 19 | func stop() 20 | } 21 | 22 | class EventSubscribtions { 23 | var value: [Subscription] 24 | init(value: [Subscription]) { 25 | self.value = value 26 | } 27 | } 28 | 29 | typealias ClassName = NSString 30 | 31 | open class TopicEventBus: TopicEventBusType { 32 | private var subscribers = NSMapTable.init(keyOptions: NSPointerFunctions.Options.strongMemory, 33 | valueOptions: NSPointerFunctions.Options.strongMemory ) 34 | public init() {} 35 | public func fire(event: TopicEvent) { 36 | let className = String(describing: event) 37 | guard let subscribtions = self.subscribers.object(forKey: className as ClassName) else { 38 | return 39 | } 40 | subscribtions.value.forEach { (subscribtion: Subscription) in 41 | if (subscribtion.key == nil) { 42 | //Subscribed for all events 43 | subscribtion.subscriber?(event) 44 | return 45 | } 46 | if (subscribtion.key == event.key) { 47 | // Subscrbied to fired topic 48 | subscribtion.subscriber?(event) 49 | return 50 | } 51 | } 52 | } 53 | 54 | public func subscribe(callback: @escaping (T) -> Void) -> Listener { 55 | return self.subscribe(topic: nil, callback: callback) 56 | } 57 | 58 | public func subscribe(topic: String?, callback: @escaping (T) -> Void) -> Listener { 59 | let className = NSStringFromClass(T.self) 60 | if (self.subscribers.object(forKey: className as ClassName) == nil) { 61 | self.subscribers.setObject(EventSubscribtions(value: []), forKey: className as ClassName) 62 | } 63 | let subscribtions = self.subscribers.object(forKey: className as ClassName) 64 | let subscribtion = Subscription.init(key: topic, subscriber: { value in 65 | callback(value as! T) 66 | }) 67 | subscribtions?.value.append(subscribtion) 68 | return subscribtion 69 | } 70 | 71 | public func terminate() { 72 | print("Terminating topic event bus") 73 | self.subscribers.removeAllObjects() 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 244ACAAC331E8046DF61F0DB /* Pods_ExampleProjectTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ECF109A33EFE57684D857C2C /* Pods_ExampleProjectTests.framework */; }; 11 | 5706D3D2906472F5CFD34B74 /* Pods_ExampleProjectUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA4622265F9C40910C9328DD /* Pods_ExampleProjectUITests.framework */; }; 12 | 77EE1B8B671D7B2FE30C2FE0 /* Pods_ExampleProject.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69F84389DDDB809AF5B90E94 /* Pods_ExampleProject.framework */; }; 13 | 8A36689C211480660063EA3E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A36689B211480660063EA3E /* AppDelegate.swift */; }; 14 | 8A36689E211480660063EA3E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A36689D211480660063EA3E /* ViewController.swift */; }; 15 | 8A3668A1211480660063EA3E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A36689F211480660063EA3E /* Main.storyboard */; }; 16 | 8A3668A3211480660063EA3E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8A3668A2211480660063EA3E /* Assets.xcassets */; }; 17 | 8A3668A6211480660063EA3E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A3668A4211480660063EA3E /* LaunchScreen.storyboard */; }; 18 | 8A3668BC211480670063EA3E /* ExampleProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3668BB211480670063EA3E /* ExampleProjectUITests.swift */; }; 19 | 8A3668CA2114808F0063EA3E /* TopicEventBusTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3668C92114808F0063EA3E /* TopicEventBusTests.swift */; }; 20 | 8A3668CD21148B550063EA3E /* ConversationChangedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3668CC21148B550063EA3E /* ConversationChangedEvent.swift */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXContainerItemProxy section */ 24 | 8A3668AD211480670063EA3E /* PBXContainerItemProxy */ = { 25 | isa = PBXContainerItemProxy; 26 | containerPortal = 8A366890211480660063EA3E /* Project object */; 27 | proxyType = 1; 28 | remoteGlobalIDString = 8A366897211480660063EA3E; 29 | remoteInfo = ExampleProject; 30 | }; 31 | 8A3668B8211480670063EA3E /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = 8A366890211480660063EA3E /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 8A366897211480660063EA3E; 36 | remoteInfo = ExampleProject; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 05BFDC536786358C83A8FF61 /* Pods-ExampleProjectTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProjectTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.debug.xcconfig"; sourceTree = ""; }; 42 | 38FDB10EE0FF8853D774ACCB /* Pods-ExampleProjectTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProjectTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.release.xcconfig"; sourceTree = ""; }; 43 | 69F84389DDDB809AF5B90E94 /* Pods_ExampleProject.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ExampleProject.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 73DB91706109BF5F0D3BAFD0 /* Pods-ExampleProjectUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProjectUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.release.xcconfig"; sourceTree = ""; }; 45 | 7C97C8C6983D56446A1328CC /* Pods-ExampleProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProject.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject.debug.xcconfig"; sourceTree = ""; }; 46 | 8A366898211480660063EA3E /* ExampleProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExampleProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | 8A36689B211480660063EA3E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 48 | 8A36689D211480660063EA3E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 49 | 8A3668A0211480660063EA3E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 50 | 8A3668A2211480660063EA3E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 51 | 8A3668A5211480660063EA3E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 52 | 8A3668A7211480660063EA3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | 8A3668AC211480670063EA3E /* ExampleProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | 8A3668B2211480670063EA3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55 | 8A3668B7211480670063EA3E /* ExampleProjectUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleProjectUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 8A3668BB211480670063EA3E /* ExampleProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleProjectUITests.swift; sourceTree = ""; }; 57 | 8A3668BD211480670063EA3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 58 | 8A3668C92114808F0063EA3E /* TopicEventBusTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TopicEventBusTests.swift; path = ../../Tests/TopicEventBusTests.swift; sourceTree = ""; }; 59 | 8A3668CC21148B550063EA3E /* ConversationChangedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationChangedEvent.swift; sourceTree = ""; }; 60 | 905CD450BBB7B61E2B18EECE /* Pods-ExampleProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProject.release.xcconfig"; path = "Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject.release.xcconfig"; sourceTree = ""; }; 61 | B6B6D0C972A5E4329D685D7F /* Pods-ExampleProjectUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProjectUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.debug.xcconfig"; sourceTree = ""; }; 62 | EA4622265F9C40910C9328DD /* Pods_ExampleProjectUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ExampleProjectUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | ECF109A33EFE57684D857C2C /* Pods_ExampleProjectTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ExampleProjectTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | /* End PBXFileReference section */ 65 | 66 | /* Begin PBXFrameworksBuildPhase section */ 67 | 8A366895211480660063EA3E /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | 77EE1B8B671D7B2FE30C2FE0 /* Pods_ExampleProject.framework in Frameworks */, 72 | ); 73 | runOnlyForDeploymentPostprocessing = 0; 74 | }; 75 | 8A3668A9211480670063EA3E /* Frameworks */ = { 76 | isa = PBXFrameworksBuildPhase; 77 | buildActionMask = 2147483647; 78 | files = ( 79 | 244ACAAC331E8046DF61F0DB /* Pods_ExampleProjectTests.framework in Frameworks */, 80 | ); 81 | runOnlyForDeploymentPostprocessing = 0; 82 | }; 83 | 8A3668B4211480670063EA3E /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | 5706D3D2906472F5CFD34B74 /* Pods_ExampleProjectUITests.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | /* End PBXFrameworksBuildPhase section */ 92 | 93 | /* Begin PBXGroup section */ 94 | 543687AD8D7AAB9F37C5022D /* Pods */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 7C97C8C6983D56446A1328CC /* Pods-ExampleProject.debug.xcconfig */, 98 | 905CD450BBB7B61E2B18EECE /* Pods-ExampleProject.release.xcconfig */, 99 | 05BFDC536786358C83A8FF61 /* Pods-ExampleProjectTests.debug.xcconfig */, 100 | 38FDB10EE0FF8853D774ACCB /* Pods-ExampleProjectTests.release.xcconfig */, 101 | B6B6D0C972A5E4329D685D7F /* Pods-ExampleProjectUITests.debug.xcconfig */, 102 | 73DB91706109BF5F0D3BAFD0 /* Pods-ExampleProjectUITests.release.xcconfig */, 103 | ); 104 | name = Pods; 105 | sourceTree = ""; 106 | }; 107 | 8A36688F211480660063EA3E = { 108 | isa = PBXGroup; 109 | children = ( 110 | 8A36689A211480660063EA3E /* ExampleProject */, 111 | 8A3668AF211480670063EA3E /* ExampleProjectTests */, 112 | 8A3668BA211480670063EA3E /* ExampleProjectUITests */, 113 | 8A366899211480660063EA3E /* Products */, 114 | 543687AD8D7AAB9F37C5022D /* Pods */, 115 | D76C2BDC15493BCE2963E0FB /* Frameworks */, 116 | ); 117 | sourceTree = ""; 118 | }; 119 | 8A366899211480660063EA3E /* Products */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 8A366898211480660063EA3E /* ExampleProject.app */, 123 | 8A3668AC211480670063EA3E /* ExampleProjectTests.xctest */, 124 | 8A3668B7211480670063EA3E /* ExampleProjectUITests.xctest */, 125 | ); 126 | name = Products; 127 | sourceTree = ""; 128 | }; 129 | 8A36689A211480660063EA3E /* ExampleProject */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | 8A36689B211480660063EA3E /* AppDelegate.swift */, 133 | 8A36689D211480660063EA3E /* ViewController.swift */, 134 | 8A3668CB21148B430063EA3E /* Events */, 135 | 8A36689F211480660063EA3E /* Main.storyboard */, 136 | 8A3668A2211480660063EA3E /* Assets.xcassets */, 137 | 8A3668A4211480660063EA3E /* LaunchScreen.storyboard */, 138 | 8A3668A7211480660063EA3E /* Info.plist */, 139 | ); 140 | path = ExampleProject; 141 | sourceTree = ""; 142 | }; 143 | 8A3668AF211480670063EA3E /* ExampleProjectTests */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | 8A3668C92114808F0063EA3E /* TopicEventBusTests.swift */, 147 | 8A3668B2211480670063EA3E /* Info.plist */, 148 | ); 149 | path = ExampleProjectTests; 150 | sourceTree = ""; 151 | }; 152 | 8A3668BA211480670063EA3E /* ExampleProjectUITests */ = { 153 | isa = PBXGroup; 154 | children = ( 155 | 8A3668BB211480670063EA3E /* ExampleProjectUITests.swift */, 156 | 8A3668BD211480670063EA3E /* Info.plist */, 157 | ); 158 | path = ExampleProjectUITests; 159 | sourceTree = ""; 160 | }; 161 | 8A3668CB21148B430063EA3E /* Events */ = { 162 | isa = PBXGroup; 163 | children = ( 164 | 8A3668CC21148B550063EA3E /* ConversationChangedEvent.swift */, 165 | ); 166 | path = Events; 167 | sourceTree = ""; 168 | }; 169 | D76C2BDC15493BCE2963E0FB /* Frameworks */ = { 170 | isa = PBXGroup; 171 | children = ( 172 | 69F84389DDDB809AF5B90E94 /* Pods_ExampleProject.framework */, 173 | ECF109A33EFE57684D857C2C /* Pods_ExampleProjectTests.framework */, 174 | EA4622265F9C40910C9328DD /* Pods_ExampleProjectUITests.framework */, 175 | ); 176 | name = Frameworks; 177 | sourceTree = ""; 178 | }; 179 | /* End PBXGroup section */ 180 | 181 | /* Begin PBXNativeTarget section */ 182 | 8A366897211480660063EA3E /* ExampleProject */ = { 183 | isa = PBXNativeTarget; 184 | buildConfigurationList = 8A3668C0211480670063EA3E /* Build configuration list for PBXNativeTarget "ExampleProject" */; 185 | buildPhases = ( 186 | DF95CC75A63287A78516772A /* [CP] Check Pods Manifest.lock */, 187 | 8A366894211480660063EA3E /* Sources */, 188 | 8A366895211480660063EA3E /* Frameworks */, 189 | 8A366896211480660063EA3E /* Resources */, 190 | 86A5093FCF62D3F5D57BCCE8 /* [CP] Embed Pods Frameworks */, 191 | E0AF1B178F0AFF3B563617DA /* [CP] Copy Pods Resources */, 192 | ); 193 | buildRules = ( 194 | ); 195 | dependencies = ( 196 | ); 197 | name = ExampleProject; 198 | productName = ExampleProject; 199 | productReference = 8A366898211480660063EA3E /* ExampleProject.app */; 200 | productType = "com.apple.product-type.application"; 201 | }; 202 | 8A3668AB211480670063EA3E /* ExampleProjectTests */ = { 203 | isa = PBXNativeTarget; 204 | buildConfigurationList = 8A3668C3211480670063EA3E /* Build configuration list for PBXNativeTarget "ExampleProjectTests" */; 205 | buildPhases = ( 206 | 76CB0F06B45F113B99CD2A87 /* [CP] Check Pods Manifest.lock */, 207 | 8A3668A8211480670063EA3E /* Sources */, 208 | 8A3668A9211480670063EA3E /* Frameworks */, 209 | 8A3668AA211480670063EA3E /* Resources */, 210 | B21E5C02C49475FF9C6EC230 /* [CP] Embed Pods Frameworks */, 211 | 5285A08CD9AF83F412154C7C /* [CP] Copy Pods Resources */, 212 | ); 213 | buildRules = ( 214 | ); 215 | dependencies = ( 216 | 8A3668AE211480670063EA3E /* PBXTargetDependency */, 217 | ); 218 | name = ExampleProjectTests; 219 | productName = ExampleProjectTests; 220 | productReference = 8A3668AC211480670063EA3E /* ExampleProjectTests.xctest */; 221 | productType = "com.apple.product-type.bundle.unit-test"; 222 | }; 223 | 8A3668B6211480670063EA3E /* ExampleProjectUITests */ = { 224 | isa = PBXNativeTarget; 225 | buildConfigurationList = 8A3668C6211480670063EA3E /* Build configuration list for PBXNativeTarget "ExampleProjectUITests" */; 226 | buildPhases = ( 227 | 7A4A958466C63B6F05CD9CAB /* [CP] Check Pods Manifest.lock */, 228 | 8A3668B3211480670063EA3E /* Sources */, 229 | 8A3668B4211480670063EA3E /* Frameworks */, 230 | 8A3668B5211480670063EA3E /* Resources */, 231 | D38580F520034E241EA6F664 /* [CP] Embed Pods Frameworks */, 232 | 71339EE3FDCEA4A75E027010 /* [CP] Copy Pods Resources */, 233 | ); 234 | buildRules = ( 235 | ); 236 | dependencies = ( 237 | 8A3668B9211480670063EA3E /* PBXTargetDependency */, 238 | ); 239 | name = ExampleProjectUITests; 240 | productName = ExampleProjectUITests; 241 | productReference = 8A3668B7211480670063EA3E /* ExampleProjectUITests.xctest */; 242 | productType = "com.apple.product-type.bundle.ui-testing"; 243 | }; 244 | /* End PBXNativeTarget section */ 245 | 246 | /* Begin PBXProject section */ 247 | 8A366890211480660063EA3E /* Project object */ = { 248 | isa = PBXProject; 249 | attributes = { 250 | LastSwiftUpdateCheck = 0940; 251 | LastUpgradeCheck = 0940; 252 | ORGANIZATIONNAME = Matan; 253 | TargetAttributes = { 254 | 8A366897211480660063EA3E = { 255 | CreatedOnToolsVersion = 9.4.1; 256 | }; 257 | 8A3668AB211480670063EA3E = { 258 | CreatedOnToolsVersion = 9.4.1; 259 | TestTargetID = 8A366897211480660063EA3E; 260 | }; 261 | 8A3668B6211480670063EA3E = { 262 | CreatedOnToolsVersion = 9.4.1; 263 | TestTargetID = 8A366897211480660063EA3E; 264 | }; 265 | }; 266 | }; 267 | buildConfigurationList = 8A366893211480660063EA3E /* Build configuration list for PBXProject "ExampleProject" */; 268 | compatibilityVersion = "Xcode 9.3"; 269 | developmentRegion = en; 270 | hasScannedForEncodings = 0; 271 | knownRegions = ( 272 | en, 273 | Base, 274 | ); 275 | mainGroup = 8A36688F211480660063EA3E; 276 | productRefGroup = 8A366899211480660063EA3E /* Products */; 277 | projectDirPath = ""; 278 | projectRoot = ""; 279 | targets = ( 280 | 8A366897211480660063EA3E /* ExampleProject */, 281 | 8A3668AB211480670063EA3E /* ExampleProjectTests */, 282 | 8A3668B6211480670063EA3E /* ExampleProjectUITests */, 283 | ); 284 | }; 285 | /* End PBXProject section */ 286 | 287 | /* Begin PBXResourcesBuildPhase section */ 288 | 8A366896211480660063EA3E /* Resources */ = { 289 | isa = PBXResourcesBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | 8A3668A6211480660063EA3E /* LaunchScreen.storyboard in Resources */, 293 | 8A3668A3211480660063EA3E /* Assets.xcassets in Resources */, 294 | 8A3668A1211480660063EA3E /* Main.storyboard in Resources */, 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | }; 298 | 8A3668AA211480670063EA3E /* Resources */ = { 299 | isa = PBXResourcesBuildPhase; 300 | buildActionMask = 2147483647; 301 | files = ( 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | 8A3668B5211480670063EA3E /* Resources */ = { 306 | isa = PBXResourcesBuildPhase; 307 | buildActionMask = 2147483647; 308 | files = ( 309 | ); 310 | runOnlyForDeploymentPostprocessing = 0; 311 | }; 312 | /* End PBXResourcesBuildPhase section */ 313 | 314 | /* Begin PBXShellScriptBuildPhase section */ 315 | 5285A08CD9AF83F412154C7C /* [CP] Copy Pods Resources */ = { 316 | isa = PBXShellScriptBuildPhase; 317 | buildActionMask = 2147483647; 318 | files = ( 319 | ); 320 | inputPaths = ( 321 | ); 322 | name = "[CP] Copy Pods Resources"; 323 | outputPaths = ( 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | shellPath = /bin/sh; 327 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-resources.sh\"\n"; 328 | showEnvVarsInLog = 0; 329 | }; 330 | 71339EE3FDCEA4A75E027010 /* [CP] Copy Pods Resources */ = { 331 | isa = PBXShellScriptBuildPhase; 332 | buildActionMask = 2147483647; 333 | files = ( 334 | ); 335 | inputPaths = ( 336 | ); 337 | name = "[CP] Copy Pods Resources"; 338 | outputPaths = ( 339 | ); 340 | runOnlyForDeploymentPostprocessing = 0; 341 | shellPath = /bin/sh; 342 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-resources.sh\"\n"; 343 | showEnvVarsInLog = 0; 344 | }; 345 | 76CB0F06B45F113B99CD2A87 /* [CP] Check Pods Manifest.lock */ = { 346 | isa = PBXShellScriptBuildPhase; 347 | buildActionMask = 2147483647; 348 | files = ( 349 | ); 350 | inputPaths = ( 351 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 352 | "${PODS_ROOT}/Manifest.lock", 353 | ); 354 | name = "[CP] Check Pods Manifest.lock"; 355 | outputPaths = ( 356 | "$(DERIVED_FILE_DIR)/Pods-ExampleProjectTests-checkManifestLockResult.txt", 357 | ); 358 | runOnlyForDeploymentPostprocessing = 0; 359 | shellPath = /bin/sh; 360 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 361 | showEnvVarsInLog = 0; 362 | }; 363 | 7A4A958466C63B6F05CD9CAB /* [CP] Check Pods Manifest.lock */ = { 364 | isa = PBXShellScriptBuildPhase; 365 | buildActionMask = 2147483647; 366 | files = ( 367 | ); 368 | inputPaths = ( 369 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 370 | "${PODS_ROOT}/Manifest.lock", 371 | ); 372 | name = "[CP] Check Pods Manifest.lock"; 373 | outputPaths = ( 374 | "$(DERIVED_FILE_DIR)/Pods-ExampleProjectUITests-checkManifestLockResult.txt", 375 | ); 376 | runOnlyForDeploymentPostprocessing = 0; 377 | shellPath = /bin/sh; 378 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 379 | showEnvVarsInLog = 0; 380 | }; 381 | 86A5093FCF62D3F5D57BCCE8 /* [CP] Embed Pods Frameworks */ = { 382 | isa = PBXShellScriptBuildPhase; 383 | buildActionMask = 2147483647; 384 | files = ( 385 | ); 386 | inputPaths = ( 387 | "${SRCROOT}/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-frameworks.sh", 388 | "${BUILT_PRODUCTS_DIR}/TopicEventBus/TopicEventBus.framework", 389 | ); 390 | name = "[CP] Embed Pods Frameworks"; 391 | outputPaths = ( 392 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TopicEventBus.framework", 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | shellPath = /bin/sh; 396 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-frameworks.sh\"\n"; 397 | showEnvVarsInLog = 0; 398 | }; 399 | B21E5C02C49475FF9C6EC230 /* [CP] Embed Pods Frameworks */ = { 400 | isa = PBXShellScriptBuildPhase; 401 | buildActionMask = 2147483647; 402 | files = ( 403 | ); 404 | inputPaths = ( 405 | "${SRCROOT}/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-frameworks.sh", 406 | "${BUILT_PRODUCTS_DIR}/TopicEventBus/TopicEventBus.framework", 407 | ); 408 | name = "[CP] Embed Pods Frameworks"; 409 | outputPaths = ( 410 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TopicEventBus.framework", 411 | ); 412 | runOnlyForDeploymentPostprocessing = 0; 413 | shellPath = /bin/sh; 414 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-frameworks.sh\"\n"; 415 | showEnvVarsInLog = 0; 416 | }; 417 | D38580F520034E241EA6F664 /* [CP] Embed Pods Frameworks */ = { 418 | isa = PBXShellScriptBuildPhase; 419 | buildActionMask = 2147483647; 420 | files = ( 421 | ); 422 | inputPaths = ( 423 | ); 424 | name = "[CP] Embed Pods Frameworks"; 425 | outputPaths = ( 426 | ); 427 | runOnlyForDeploymentPostprocessing = 0; 428 | shellPath = /bin/sh; 429 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-frameworks.sh\"\n"; 430 | showEnvVarsInLog = 0; 431 | }; 432 | DF95CC75A63287A78516772A /* [CP] Check Pods Manifest.lock */ = { 433 | isa = PBXShellScriptBuildPhase; 434 | buildActionMask = 2147483647; 435 | files = ( 436 | ); 437 | inputPaths = ( 438 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 439 | "${PODS_ROOT}/Manifest.lock", 440 | ); 441 | name = "[CP] Check Pods Manifest.lock"; 442 | outputPaths = ( 443 | "$(DERIVED_FILE_DIR)/Pods-ExampleProject-checkManifestLockResult.txt", 444 | ); 445 | runOnlyForDeploymentPostprocessing = 0; 446 | shellPath = /bin/sh; 447 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 448 | showEnvVarsInLog = 0; 449 | }; 450 | E0AF1B178F0AFF3B563617DA /* [CP] Copy Pods Resources */ = { 451 | isa = PBXShellScriptBuildPhase; 452 | buildActionMask = 2147483647; 453 | files = ( 454 | ); 455 | inputPaths = ( 456 | ); 457 | name = "[CP] Copy Pods Resources"; 458 | outputPaths = ( 459 | ); 460 | runOnlyForDeploymentPostprocessing = 0; 461 | shellPath = /bin/sh; 462 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-resources.sh\"\n"; 463 | showEnvVarsInLog = 0; 464 | }; 465 | /* End PBXShellScriptBuildPhase section */ 466 | 467 | /* Begin PBXSourcesBuildPhase section */ 468 | 8A366894211480660063EA3E /* Sources */ = { 469 | isa = PBXSourcesBuildPhase; 470 | buildActionMask = 2147483647; 471 | files = ( 472 | 8A36689E211480660063EA3E /* ViewController.swift in Sources */, 473 | 8A3668CD21148B550063EA3E /* ConversationChangedEvent.swift in Sources */, 474 | 8A36689C211480660063EA3E /* AppDelegate.swift in Sources */, 475 | ); 476 | runOnlyForDeploymentPostprocessing = 0; 477 | }; 478 | 8A3668A8211480670063EA3E /* Sources */ = { 479 | isa = PBXSourcesBuildPhase; 480 | buildActionMask = 2147483647; 481 | files = ( 482 | 8A3668CA2114808F0063EA3E /* TopicEventBusTests.swift in Sources */, 483 | ); 484 | runOnlyForDeploymentPostprocessing = 0; 485 | }; 486 | 8A3668B3211480670063EA3E /* Sources */ = { 487 | isa = PBXSourcesBuildPhase; 488 | buildActionMask = 2147483647; 489 | files = ( 490 | 8A3668BC211480670063EA3E /* ExampleProjectUITests.swift in Sources */, 491 | ); 492 | runOnlyForDeploymentPostprocessing = 0; 493 | }; 494 | /* End PBXSourcesBuildPhase section */ 495 | 496 | /* Begin PBXTargetDependency section */ 497 | 8A3668AE211480670063EA3E /* PBXTargetDependency */ = { 498 | isa = PBXTargetDependency; 499 | target = 8A366897211480660063EA3E /* ExampleProject */; 500 | targetProxy = 8A3668AD211480670063EA3E /* PBXContainerItemProxy */; 501 | }; 502 | 8A3668B9211480670063EA3E /* PBXTargetDependency */ = { 503 | isa = PBXTargetDependency; 504 | target = 8A366897211480660063EA3E /* ExampleProject */; 505 | targetProxy = 8A3668B8211480670063EA3E /* PBXContainerItemProxy */; 506 | }; 507 | /* End PBXTargetDependency section */ 508 | 509 | /* Begin PBXVariantGroup section */ 510 | 8A36689F211480660063EA3E /* Main.storyboard */ = { 511 | isa = PBXVariantGroup; 512 | children = ( 513 | 8A3668A0211480660063EA3E /* Base */, 514 | ); 515 | name = Main.storyboard; 516 | sourceTree = ""; 517 | }; 518 | 8A3668A4211480660063EA3E /* LaunchScreen.storyboard */ = { 519 | isa = PBXVariantGroup; 520 | children = ( 521 | 8A3668A5211480660063EA3E /* Base */, 522 | ); 523 | name = LaunchScreen.storyboard; 524 | sourceTree = ""; 525 | }; 526 | /* End PBXVariantGroup section */ 527 | 528 | /* Begin XCBuildConfiguration section */ 529 | 8A3668BE211480670063EA3E /* Debug */ = { 530 | isa = XCBuildConfiguration; 531 | buildSettings = { 532 | ALWAYS_SEARCH_USER_PATHS = NO; 533 | CLANG_ANALYZER_NONNULL = YES; 534 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 535 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 536 | CLANG_CXX_LIBRARY = "libc++"; 537 | CLANG_ENABLE_MODULES = YES; 538 | CLANG_ENABLE_OBJC_ARC = YES; 539 | CLANG_ENABLE_OBJC_WEAK = YES; 540 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 541 | CLANG_WARN_BOOL_CONVERSION = YES; 542 | CLANG_WARN_COMMA = YES; 543 | CLANG_WARN_CONSTANT_CONVERSION = YES; 544 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 545 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 546 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 547 | CLANG_WARN_EMPTY_BODY = YES; 548 | CLANG_WARN_ENUM_CONVERSION = YES; 549 | CLANG_WARN_INFINITE_RECURSION = YES; 550 | CLANG_WARN_INT_CONVERSION = YES; 551 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 552 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 553 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 554 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 555 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 556 | CLANG_WARN_STRICT_PROTOTYPES = YES; 557 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 558 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 559 | CLANG_WARN_UNREACHABLE_CODE = YES; 560 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 561 | CODE_SIGN_IDENTITY = "iPhone Developer"; 562 | COPY_PHASE_STRIP = NO; 563 | DEBUG_INFORMATION_FORMAT = dwarf; 564 | ENABLE_STRICT_OBJC_MSGSEND = YES; 565 | ENABLE_TESTABILITY = YES; 566 | GCC_C_LANGUAGE_STANDARD = gnu11; 567 | GCC_DYNAMIC_NO_PIC = NO; 568 | GCC_NO_COMMON_BLOCKS = YES; 569 | GCC_OPTIMIZATION_LEVEL = 0; 570 | GCC_PREPROCESSOR_DEFINITIONS = ( 571 | "DEBUG=1", 572 | "$(inherited)", 573 | ); 574 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 575 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 576 | GCC_WARN_UNDECLARED_SELECTOR = YES; 577 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 578 | GCC_WARN_UNUSED_FUNCTION = YES; 579 | GCC_WARN_UNUSED_VARIABLE = YES; 580 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 581 | MTL_ENABLE_DEBUG_INFO = YES; 582 | ONLY_ACTIVE_ARCH = YES; 583 | SDKROOT = iphoneos; 584 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 585 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 586 | }; 587 | name = Debug; 588 | }; 589 | 8A3668BF211480670063EA3E /* Release */ = { 590 | isa = XCBuildConfiguration; 591 | buildSettings = { 592 | ALWAYS_SEARCH_USER_PATHS = NO; 593 | CLANG_ANALYZER_NONNULL = YES; 594 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 595 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 596 | CLANG_CXX_LIBRARY = "libc++"; 597 | CLANG_ENABLE_MODULES = YES; 598 | CLANG_ENABLE_OBJC_ARC = YES; 599 | CLANG_ENABLE_OBJC_WEAK = YES; 600 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 601 | CLANG_WARN_BOOL_CONVERSION = YES; 602 | CLANG_WARN_COMMA = YES; 603 | CLANG_WARN_CONSTANT_CONVERSION = YES; 604 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 605 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 606 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 607 | CLANG_WARN_EMPTY_BODY = YES; 608 | CLANG_WARN_ENUM_CONVERSION = YES; 609 | CLANG_WARN_INFINITE_RECURSION = YES; 610 | CLANG_WARN_INT_CONVERSION = YES; 611 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 612 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 613 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 614 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 615 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 616 | CLANG_WARN_STRICT_PROTOTYPES = YES; 617 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 618 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 619 | CLANG_WARN_UNREACHABLE_CODE = YES; 620 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 621 | CODE_SIGN_IDENTITY = "iPhone Developer"; 622 | COPY_PHASE_STRIP = NO; 623 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 624 | ENABLE_NS_ASSERTIONS = NO; 625 | ENABLE_STRICT_OBJC_MSGSEND = YES; 626 | GCC_C_LANGUAGE_STANDARD = gnu11; 627 | GCC_NO_COMMON_BLOCKS = YES; 628 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 629 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 630 | GCC_WARN_UNDECLARED_SELECTOR = YES; 631 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 632 | GCC_WARN_UNUSED_FUNCTION = YES; 633 | GCC_WARN_UNUSED_VARIABLE = YES; 634 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 635 | MTL_ENABLE_DEBUG_INFO = NO; 636 | SDKROOT = iphoneos; 637 | SWIFT_COMPILATION_MODE = wholemodule; 638 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 639 | VALIDATE_PRODUCT = YES; 640 | }; 641 | name = Release; 642 | }; 643 | 8A3668C1211480670063EA3E /* Debug */ = { 644 | isa = XCBuildConfiguration; 645 | baseConfigurationReference = 7C97C8C6983D56446A1328CC /* Pods-ExampleProject.debug.xcconfig */; 646 | buildSettings = { 647 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 648 | CODE_SIGN_STYLE = Automatic; 649 | DEVELOPMENT_TEAM = PH85M24H5K; 650 | INFOPLIST_FILE = ExampleProject/Info.plist; 651 | LD_RUNPATH_SEARCH_PATHS = ( 652 | "$(inherited)", 653 | "@executable_path/Frameworks", 654 | ); 655 | PRODUCT_BUNDLE_IDENTIFIER = MC.ExampleProject; 656 | PRODUCT_NAME = "$(TARGET_NAME)"; 657 | SWIFT_VERSION = 4.0; 658 | TARGETED_DEVICE_FAMILY = "1,2"; 659 | }; 660 | name = Debug; 661 | }; 662 | 8A3668C2211480670063EA3E /* Release */ = { 663 | isa = XCBuildConfiguration; 664 | baseConfigurationReference = 905CD450BBB7B61E2B18EECE /* Pods-ExampleProject.release.xcconfig */; 665 | buildSettings = { 666 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 667 | CODE_SIGN_STYLE = Automatic; 668 | DEVELOPMENT_TEAM = PH85M24H5K; 669 | INFOPLIST_FILE = ExampleProject/Info.plist; 670 | LD_RUNPATH_SEARCH_PATHS = ( 671 | "$(inherited)", 672 | "@executable_path/Frameworks", 673 | ); 674 | PRODUCT_BUNDLE_IDENTIFIER = MC.ExampleProject; 675 | PRODUCT_NAME = "$(TARGET_NAME)"; 676 | SWIFT_VERSION = 4.0; 677 | TARGETED_DEVICE_FAMILY = "1,2"; 678 | }; 679 | name = Release; 680 | }; 681 | 8A3668C4211480670063EA3E /* Debug */ = { 682 | isa = XCBuildConfiguration; 683 | baseConfigurationReference = 05BFDC536786358C83A8FF61 /* Pods-ExampleProjectTests.debug.xcconfig */; 684 | buildSettings = { 685 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 686 | BUNDLE_LOADER = "$(TEST_HOST)"; 687 | CODE_SIGN_STYLE = Automatic; 688 | DEVELOPMENT_TEAM = PH85M24H5K; 689 | INFOPLIST_FILE = ExampleProjectTests/Info.plist; 690 | LD_RUNPATH_SEARCH_PATHS = ( 691 | "$(inherited)", 692 | "@executable_path/Frameworks", 693 | "@loader_path/Frameworks", 694 | ); 695 | PRODUCT_BUNDLE_IDENTIFIER = MC.ExampleProjectTests; 696 | PRODUCT_NAME = "$(TARGET_NAME)"; 697 | SWIFT_VERSION = 4.0; 698 | TARGETED_DEVICE_FAMILY = "1,2"; 699 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ExampleProject.app/ExampleProject"; 700 | }; 701 | name = Debug; 702 | }; 703 | 8A3668C5211480670063EA3E /* Release */ = { 704 | isa = XCBuildConfiguration; 705 | baseConfigurationReference = 38FDB10EE0FF8853D774ACCB /* Pods-ExampleProjectTests.release.xcconfig */; 706 | buildSettings = { 707 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 708 | BUNDLE_LOADER = "$(TEST_HOST)"; 709 | CODE_SIGN_STYLE = Automatic; 710 | DEVELOPMENT_TEAM = PH85M24H5K; 711 | INFOPLIST_FILE = ExampleProjectTests/Info.plist; 712 | LD_RUNPATH_SEARCH_PATHS = ( 713 | "$(inherited)", 714 | "@executable_path/Frameworks", 715 | "@loader_path/Frameworks", 716 | ); 717 | PRODUCT_BUNDLE_IDENTIFIER = MC.ExampleProjectTests; 718 | PRODUCT_NAME = "$(TARGET_NAME)"; 719 | SWIFT_VERSION = 4.0; 720 | TARGETED_DEVICE_FAMILY = "1,2"; 721 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ExampleProject.app/ExampleProject"; 722 | }; 723 | name = Release; 724 | }; 725 | 8A3668C7211480670063EA3E /* Debug */ = { 726 | isa = XCBuildConfiguration; 727 | baseConfigurationReference = B6B6D0C972A5E4329D685D7F /* Pods-ExampleProjectUITests.debug.xcconfig */; 728 | buildSettings = { 729 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 730 | CODE_SIGN_STYLE = Automatic; 731 | DEVELOPMENT_TEAM = PH85M24H5K; 732 | INFOPLIST_FILE = ExampleProjectUITests/Info.plist; 733 | LD_RUNPATH_SEARCH_PATHS = ( 734 | "$(inherited)", 735 | "@executable_path/Frameworks", 736 | "@loader_path/Frameworks", 737 | ); 738 | PRODUCT_BUNDLE_IDENTIFIER = MC.ExampleProjectUITests; 739 | PRODUCT_NAME = "$(TARGET_NAME)"; 740 | SWIFT_VERSION = 4.0; 741 | TARGETED_DEVICE_FAMILY = "1,2"; 742 | TEST_TARGET_NAME = ExampleProject; 743 | }; 744 | name = Debug; 745 | }; 746 | 8A3668C8211480670063EA3E /* Release */ = { 747 | isa = XCBuildConfiguration; 748 | baseConfigurationReference = 73DB91706109BF5F0D3BAFD0 /* Pods-ExampleProjectUITests.release.xcconfig */; 749 | buildSettings = { 750 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 751 | CODE_SIGN_STYLE = Automatic; 752 | DEVELOPMENT_TEAM = PH85M24H5K; 753 | INFOPLIST_FILE = ExampleProjectUITests/Info.plist; 754 | LD_RUNPATH_SEARCH_PATHS = ( 755 | "$(inherited)", 756 | "@executable_path/Frameworks", 757 | "@loader_path/Frameworks", 758 | ); 759 | PRODUCT_BUNDLE_IDENTIFIER = MC.ExampleProjectUITests; 760 | PRODUCT_NAME = "$(TARGET_NAME)"; 761 | SWIFT_VERSION = 4.0; 762 | TARGETED_DEVICE_FAMILY = "1,2"; 763 | TEST_TARGET_NAME = ExampleProject; 764 | }; 765 | name = Release; 766 | }; 767 | /* End XCBuildConfiguration section */ 768 | 769 | /* Begin XCConfigurationList section */ 770 | 8A366893211480660063EA3E /* Build configuration list for PBXProject "ExampleProject" */ = { 771 | isa = XCConfigurationList; 772 | buildConfigurations = ( 773 | 8A3668BE211480670063EA3E /* Debug */, 774 | 8A3668BF211480670063EA3E /* Release */, 775 | ); 776 | defaultConfigurationIsVisible = 0; 777 | defaultConfigurationName = Release; 778 | }; 779 | 8A3668C0211480670063EA3E /* Build configuration list for PBXNativeTarget "ExampleProject" */ = { 780 | isa = XCConfigurationList; 781 | buildConfigurations = ( 782 | 8A3668C1211480670063EA3E /* Debug */, 783 | 8A3668C2211480670063EA3E /* Release */, 784 | ); 785 | defaultConfigurationIsVisible = 0; 786 | defaultConfigurationName = Release; 787 | }; 788 | 8A3668C3211480670063EA3E /* Build configuration list for PBXNativeTarget "ExampleProjectTests" */ = { 789 | isa = XCConfigurationList; 790 | buildConfigurations = ( 791 | 8A3668C4211480670063EA3E /* Debug */, 792 | 8A3668C5211480670063EA3E /* Release */, 793 | ); 794 | defaultConfigurationIsVisible = 0; 795 | defaultConfigurationName = Release; 796 | }; 797 | 8A3668C6211480670063EA3E /* Build configuration list for PBXNativeTarget "ExampleProjectUITests" */ = { 798 | isa = XCConfigurationList; 799 | buildConfigurations = ( 800 | 8A3668C7211480670063EA3E /* Debug */, 801 | 8A3668C8211480670063EA3E /* Release */, 802 | ); 803 | defaultConfigurationIsVisible = 0; 804 | defaultConfigurationName = Release; 805 | }; 806 | /* End XCConfigurationList section */ 807 | }; 808 | rootObject = 8A366890211480660063EA3E /* Project object */; 809 | } 810 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcodeproj/project.xcworkspace/xcuserdata/matancohen.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/TopicEventBus/e0ac641b9159bfbad5a58c939783aa115a4198e5/ExampleProject/ExampleProject.xcodeproj/project.xcworkspace/xcuserdata/matancohen.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcodeproj/xcuserdata/matancohen.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ExampleProject.xcscheme 8 | 9 | orderHint 10 | 4 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcworkspace/xcuserdata/matancohen.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/TopicEventBus/e0ac641b9159bfbad5a58c939783aa115a4198e5/ExampleProject/ExampleProject.xcworkspace/xcuserdata/matancohen.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ExampleProject/ExampleProject.xcworkspace/xcuserdata/matancohen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ExampleProject 4 | // 5 | // Created by Matan Cohen on 8/3/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/Events/ConversationChangedEvent.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConversationChangedEvent.swift 3 | // ExampleProject 4 | // 5 | // Created by Matan Cohen on 8/3/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import TopicEventBus 11 | 12 | class ConversationChangedEvent: TopicEvent { 13 | let newTitle: String 14 | init(conversationId: String, newTitle: String) { 15 | self.newTitle = newTitle 16 | super.init() 17 | self.key = conversationId 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProject/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // ExampleProject 4 | // 5 | // Created by Matan Cohen on 8/3/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import TopicEventBus 11 | 12 | class ViewController: UIViewController { 13 | let topicEventBus = TopicEventBus.init() 14 | let conversationId = "1234" 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | _ = self.topicEventBus.subscribe { (conversationChangedEvent: ConversationChangedEvent) in 20 | let conversationKey = conversationChangedEvent.key ?? "No key" 21 | print("Any conversation changed event. key = \(conversationKey) new title = \(conversationChangedEvent.newTitle)") 22 | } 23 | 24 | let listener = self.topicEventBus.subscribe(topic: conversationId, callback: { (conversationChangedEvent: ConversationChangedEvent) in 25 | // 26 | }) 27 | listener.stop() 28 | 29 | self.topicEventBus.fire(event: ConversationChangedEvent.init(conversationId: "1234", newTitle: "First update")) 30 | self.topicEventBus.fire(event: ConversationChangedEvent.init(conversationId: "123456", newTitle: "Second update")) 31 | 32 | self.topicEventBus.terminate() 33 | } 34 | 35 | override func didReceiveMemoryWarning() { 36 | super.didReceiveMemoryWarning() 37 | // Dispose of any resources that can be recreated. 38 | } 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProjectTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProjectUITests/ExampleProjectUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleProjectUITests.swift 3 | // ExampleProjectUITests 4 | // 5 | // Created by Matan Cohen on 8/3/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class ExampleProjectUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ExampleProject/ExampleProjectUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ExampleProject/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'ExampleProject' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | pod 'TopicEventBus', :path => '../' 8 | 9 | target 'ExampleProjectTests' do 10 | inherit! :search_paths 11 | pod 'TopicEventBus', :path => '../' 12 | end 13 | 14 | target 'ExampleProjectUITests' do 15 | inherit! :search_paths 16 | # Pods for testing 17 | end 18 | 19 | end 20 | -------------------------------------------------------------------------------- /ExampleProject/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TopicEventBus (0.0.1) 3 | 4 | DEPENDENCIES: 5 | - TopicEventBus (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | TopicEventBus: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | TopicEventBus: 393ae18b320bd615faf612f0583d898994c5467f 13 | 14 | PODFILE CHECKSUM: f151ca9aaabbe94dbb6549855f2d153193a38673 15 | 16 | COCOAPODS: 1.4.0 17 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Local Podspecs/TopicEventBus.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TopicEventBus", 3 | "version": "0.0.1", 4 | "summary": "TopicEventBus", 5 | "homepage": "https://github.com/mcmatan/TopicEventBus", 6 | "platforms": { 7 | "ios": "8.0" 8 | }, 9 | "license": { 10 | "type": "MIT", 11 | "file": "LICENSE" 12 | }, 13 | "authors": { 14 | "YOURNAME": "Matan" 15 | }, 16 | "source": { 17 | "git": "https://github.com/mcmatan/TopicEventBus.git", 18 | "tag": "0.0.1" 19 | }, 20 | "frameworks": "UIKit", 21 | "source_files": [ 22 | "TopicEventBus*", 23 | "Classes/*", 24 | "Resource/*" 25 | ], 26 | "requires_arc": true 27 | } 28 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TopicEventBus (0.0.1) 3 | 4 | DEPENDENCIES: 5 | - TopicEventBus (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | TopicEventBus: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | TopicEventBus: 393ae18b320bd615faf612f0583d898994c5467f 13 | 14 | PODFILE CHECKSUM: f151ca9aaabbe94dbb6549855f2d153193a38673 15 | 16 | COCOAPODS: 1.4.0 17 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0914624577CF723AEF42EB7037A60054 /* Pods-ExampleProjectTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A941E6F4C578F09B395B3B5B4EF8D922 /* Pods-ExampleProjectTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 1672FBE5674865414FE082473EB191B0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */; }; 12 | 1A0C0106E8E511E2F2D3B4797B0C5B67 /* TopicEventBus.podspec in Sources */ = {isa = PBXBuildFile; fileRef = FFBCF857DF59EBF707295C8BEE591B71 /* TopicEventBus.podspec */; }; 13 | 1D3290B30D8C07DB8AAA276D71F4DAD5 /* Pods-ExampleProjectUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F13F53B74C4CAD7C18D6B4F109EC9E /* Pods-ExampleProjectUITests-dummy.m */; }; 14 | 3058DB3B638E4D6B592EAEC040037E09 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 15 | 449B5AABE9DEFCC6CAE70954DD2A4F0F /* Pods-ExampleProjectTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FE064375D19B3A5773F2734FE719936 /* Pods-ExampleProjectTests-dummy.m */; }; 16 | 45C48DF28CD7D709BCB83A590E9CD95E /* TopicEventBus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E93F0367F90EEB0A0CBECBF1320F72 /* TopicEventBus.swift */; }; 17 | 4D387978A7339B4402D497206BF2C928 /* TopicEventBus-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C56E1951DE95ABDF5843B85E8C7D6FD /* TopicEventBus-dummy.m */; }; 18 | 50AB9A98197528452BE733A5339D4238 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 19 | 51D166352C67301CB6D04411B043612B /* TopicEventBus-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 40C01264A52BEE051F327AF33FC93A95 /* TopicEventBus-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20 | 5A3C7D782B82A5E13DF2995B70C37F66 /* TopicEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23116CB68FA56345001A00F09A02DA40 /* TopicEvent.swift */; }; 21 | 5E93B7001D0430166AE8773E0D90EF4B /* Pods-ExampleProject-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4027D1075755006664B9BA85302F1497 /* Pods-ExampleProject-dummy.m */; }; 22 | 67599531F2874808FBC96E1A7B08D950 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 23 | 7B321E7D5C38D65BD12A77513BE03C03 /* Pods-ExampleProject-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 736CA9AF221D1D639191FB5C1B0C97F0 /* Pods-ExampleProject-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | 829631C7CD5DAED98A56C31AC3FCED67 /* Subscribtion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D584C36D3BE4D92DEE2753E71717F2B1 /* Subscribtion.swift */; }; 25 | 9C4FE94CA8249AFD2B8163969CF84E53 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */; }; 26 | C4D2DB56B30EE4C20B95F5FF0D8E12DC /* Pods-ExampleProjectUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B439359CFD94BF81AE36D6716C7B81 /* Pods-ExampleProjectUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXContainerItemProxy section */ 30 | 6C4736156F9036CC1BB3270E40F94BF5 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 74EE01D7897A6267C839812D8977D3FB; 35 | remoteInfo = TopicEventBus; 36 | }; 37 | 6E44119709DFE59E6131FCD258106D30 /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 40 | proxyType = 1; 41 | remoteGlobalIDString = 74EE01D7897A6267C839812D8977D3FB; 42 | remoteInfo = TopicEventBus; 43 | }; 44 | /* End PBXContainerItemProxy section */ 45 | 46 | /* Begin PBXFileReference section */ 47 | 08AB415BD22C3445BC41E77A2CCBB4D2 /* Pods-ExampleProjectTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ExampleProjectTests.debug.xcconfig"; sourceTree = ""; }; 48 | 0DA5F6C52CD875AA8AFB017C3680E91A /* Pods-ExampleProjectTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ExampleProjectTests-resources.sh"; sourceTree = ""; }; 49 | 16465008B2D203AE53DF5B089E81DA46 /* Pods_ExampleProjectTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ExampleProjectTests.framework; path = "Pods-ExampleProjectTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 17E163FFEFFCAEF1DA531F8A5012C6B4 /* Pods-ExampleProjectTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ExampleProjectTests.release.xcconfig"; sourceTree = ""; }; 51 | 2015BDB7412E3C42855665053157F7D2 /* Pods-ExampleProjectTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ExampleProjectTests.modulemap"; sourceTree = ""; }; 52 | 23116CB68FA56345001A00F09A02DA40 /* TopicEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TopicEvent.swift; sourceTree = ""; }; 53 | 3FE064375D19B3A5773F2734FE719936 /* Pods-ExampleProjectTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ExampleProjectTests-dummy.m"; sourceTree = ""; }; 54 | 4027D1075755006664B9BA85302F1497 /* Pods-ExampleProject-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ExampleProject-dummy.m"; sourceTree = ""; }; 55 | 40C01264A52BEE051F327AF33FC93A95 /* TopicEventBus-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TopicEventBus-umbrella.h"; sourceTree = ""; }; 56 | 40F13F53B74C4CAD7C18D6B4F109EC9E /* Pods-ExampleProjectUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ExampleProjectUITests-dummy.m"; sourceTree = ""; }; 57 | 4BEA9AD5098A6914223FAE5CFD80B90F /* Pods-ExampleProjectTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ExampleProjectTests-acknowledgements.markdown"; sourceTree = ""; }; 58 | 5C56E1951DE95ABDF5843B85E8C7D6FD /* TopicEventBus-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TopicEventBus-dummy.m"; sourceTree = ""; }; 59 | 5E12EA7EDF4ECD44311E090B98F61CDD /* TopicEventBus.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TopicEventBus.framework; path = TopicEventBus.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 6A748022CD4A95846A4654C7373FD1A1 /* Pods-ExampleProjectUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ExampleProjectUITests.modulemap"; sourceTree = ""; }; 61 | 73578B08F79BA530F1352C15FCCCE942 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 62 | 736CA9AF221D1D639191FB5C1B0C97F0 /* Pods-ExampleProject-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ExampleProject-umbrella.h"; sourceTree = ""; }; 63 | 766C67CD4A6D5D31C9A5E0F8B60CCCF2 /* Pods-ExampleProjectTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ExampleProjectTests-frameworks.sh"; sourceTree = ""; }; 64 | 7979D93188263AD26D26F38572D05762 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 65 | 7B36A7715054A9BF1D06EBA4B49F6866 /* Pods_ExampleProject.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ExampleProject.framework; path = "Pods-ExampleProject.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 66 | 7ED9122DE9C282A17E1A4C84C069B676 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 67 | 812F4EB59EA1DD05A2E8491A93912699 /* Pods-ExampleProject-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ExampleProject-acknowledgements.markdown"; sourceTree = ""; }; 68 | 84B439359CFD94BF81AE36D6716C7B81 /* Pods-ExampleProjectUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ExampleProjectUITests-umbrella.h"; sourceTree = ""; }; 69 | 8FC39854D5AEE31B712BF6A4D8B5A6FD /* Pods-ExampleProject.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ExampleProject.modulemap"; sourceTree = ""; }; 70 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 71 | A2FE417113181B928D0BB30805E2ECD6 /* Pods-ExampleProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ExampleProject.debug.xcconfig"; sourceTree = ""; }; 72 | A7496EADD8843559C027374B603C12F5 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 73 | A941E6F4C578F09B395B3B5B4EF8D922 /* Pods-ExampleProjectTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ExampleProjectTests-umbrella.h"; sourceTree = ""; }; 74 | ABF16748939BD1324E6FA2311DCCE0FD /* Pods-ExampleProjectUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ExampleProjectUITests-frameworks.sh"; sourceTree = ""; }; 75 | AC2B7B86E28D6F816D0D737738A6BB39 /* Pods-ExampleProject-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ExampleProject-resources.sh"; sourceTree = ""; }; 76 | ADB0A3EDF1D27271EED1910CE6601D88 /* Pods-ExampleProjectTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ExampleProjectTests-acknowledgements.plist"; sourceTree = ""; }; 77 | AE9E483B17B5E18D17881120FB7CD6E8 /* Pods-ExampleProjectUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ExampleProjectUITests-acknowledgements.markdown"; sourceTree = ""; }; 78 | B0895B036323DD6E5103DD2EA858009E /* Pods-ExampleProjectUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ExampleProjectUITests-resources.sh"; sourceTree = ""; }; 79 | B4E93F0367F90EEB0A0CBECBF1320F72 /* TopicEventBus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TopicEventBus.swift; sourceTree = ""; }; 80 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 81 | C1FCA4AF72C06068D5AE1433B9EEC599 /* TopicEventBus.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TopicEventBus.modulemap; sourceTree = ""; }; 82 | D0CAB9C5F30BC1CF953E65F83756F4CB /* Pods-ExampleProjectUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ExampleProjectUITests-acknowledgements.plist"; sourceTree = ""; }; 83 | D4AED29A5A115E6697EA5A257A5A3CCF /* Pods-ExampleProject-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ExampleProject-acknowledgements.plist"; sourceTree = ""; }; 84 | D584C36D3BE4D92DEE2753E71717F2B1 /* Subscribtion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Subscribtion.swift; sourceTree = ""; }; 85 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 86 | D9A4456609EB50AC0AB1C067134C63F2 /* TopicEventBus-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TopicEventBus-prefix.pch"; sourceTree = ""; }; 87 | D9EB74556FECB1D212B696C4E5497458 /* Pods_ExampleProjectUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ExampleProjectUITests.framework; path = "Pods-ExampleProjectUITests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 88 | DAA6439163A64E1E718CDB36FA4C0438 /* Pods-ExampleProject-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ExampleProject-frameworks.sh"; sourceTree = ""; }; 89 | DC31023CA73D979B027D270A0A2C3FA6 /* TopicEventBus.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TopicEventBus.xcconfig; sourceTree = ""; }; 90 | E48A0686530C3CC4D54FC6AD14A8CC57 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 91 | E525946313B6B5A6C1D295D2A415BCF0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 92 | E744D17C2DB9B144F1FA6E998188A304 /* Pods-ExampleProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ExampleProject.release.xcconfig"; sourceTree = ""; }; 93 | EA059FE5E296718A506AC78967C66B2F /* Pods-ExampleProjectUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ExampleProjectUITests.release.xcconfig"; sourceTree = ""; }; 94 | F5349E3F9D212953AC3D16BDF09454AE /* Pods-ExampleProjectUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ExampleProjectUITests.debug.xcconfig"; sourceTree = ""; }; 95 | FFBCF857DF59EBF707295C8BEE591B71 /* TopicEventBus.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = TopicEventBus.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 96 | /* End PBXFileReference section */ 97 | 98 | /* Begin PBXFrameworksBuildPhase section */ 99 | 09134CDDB8DC41F42CE0CEDF6584938F /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | 9C4FE94CA8249AFD2B8163969CF84E53 /* Foundation.framework in Frameworks */, 104 | 1672FBE5674865414FE082473EB191B0 /* UIKit.framework in Frameworks */, 105 | ); 106 | runOnlyForDeploymentPostprocessing = 0; 107 | }; 108 | 3E21DFBFA19AD3FA588770F9E1338FF5 /* Frameworks */ = { 109 | isa = PBXFrameworksBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | 50AB9A98197528452BE733A5339D4238 /* Foundation.framework in Frameworks */, 113 | ); 114 | runOnlyForDeploymentPostprocessing = 0; 115 | }; 116 | 49CA7396C5DA73E1B5F04F4A8B90991F /* Frameworks */ = { 117 | isa = PBXFrameworksBuildPhase; 118 | buildActionMask = 2147483647; 119 | files = ( 120 | 3058DB3B638E4D6B592EAEC040037E09 /* Foundation.framework in Frameworks */, 121 | ); 122 | runOnlyForDeploymentPostprocessing = 0; 123 | }; 124 | 91803F8766E91C7C9EC7819E27C69077 /* Frameworks */ = { 125 | isa = PBXFrameworksBuildPhase; 126 | buildActionMask = 2147483647; 127 | files = ( 128 | 67599531F2874808FBC96E1A7B08D950 /* Foundation.framework in Frameworks */, 129 | ); 130 | runOnlyForDeploymentPostprocessing = 0; 131 | }; 132 | /* End PBXFrameworksBuildPhase section */ 133 | 134 | /* Begin PBXGroup section */ 135 | 1E22404B779ABA54B1DDE8EB4200A8A2 /* Pod */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 73578B08F79BA530F1352C15FCCCE942 /* LICENSE */, 139 | A7496EADD8843559C027374B603C12F5 /* README.md */, 140 | ); 141 | name = Pod; 142 | sourceTree = ""; 143 | }; 144 | 38724E3004D3F30C627BC9767C8EA99A /* Targets Support Files */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | F8F0ACECD3E56FF3B2075D810595898D /* Pods-ExampleProject */, 148 | 776E54F5B38F6F942AE5007431639634 /* Pods-ExampleProjectTests */, 149 | 91DD01AA1E7D340275125135D819189C /* Pods-ExampleProjectUITests */, 150 | ); 151 | name = "Targets Support Files"; 152 | sourceTree = ""; 153 | }; 154 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 438B396F6B4147076630CAEFE34282C1 /* iOS */, 158 | ); 159 | name = Frameworks; 160 | sourceTree = ""; 161 | }; 162 | 438B396F6B4147076630CAEFE34282C1 /* iOS */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | D88AAE1F92055A60CC2FC970D7D34634 /* Foundation.framework */, 166 | B63C6A64CF66340668996F78DA6BB482 /* UIKit.framework */, 167 | ); 168 | name = iOS; 169 | sourceTree = ""; 170 | }; 171 | 776E54F5B38F6F942AE5007431639634 /* Pods-ExampleProjectTests */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | E525946313B6B5A6C1D295D2A415BCF0 /* Info.plist */, 175 | 2015BDB7412E3C42855665053157F7D2 /* Pods-ExampleProjectTests.modulemap */, 176 | 4BEA9AD5098A6914223FAE5CFD80B90F /* Pods-ExampleProjectTests-acknowledgements.markdown */, 177 | ADB0A3EDF1D27271EED1910CE6601D88 /* Pods-ExampleProjectTests-acknowledgements.plist */, 178 | 3FE064375D19B3A5773F2734FE719936 /* Pods-ExampleProjectTests-dummy.m */, 179 | 766C67CD4A6D5D31C9A5E0F8B60CCCF2 /* Pods-ExampleProjectTests-frameworks.sh */, 180 | 0DA5F6C52CD875AA8AFB017C3680E91A /* Pods-ExampleProjectTests-resources.sh */, 181 | A941E6F4C578F09B395B3B5B4EF8D922 /* Pods-ExampleProjectTests-umbrella.h */, 182 | 08AB415BD22C3445BC41E77A2CCBB4D2 /* Pods-ExampleProjectTests.debug.xcconfig */, 183 | 17E163FFEFFCAEF1DA531F8A5012C6B4 /* Pods-ExampleProjectTests.release.xcconfig */, 184 | ); 185 | name = "Pods-ExampleProjectTests"; 186 | path = "Target Support Files/Pods-ExampleProjectTests"; 187 | sourceTree = ""; 188 | }; 189 | 7DB346D0F39D3F0E887471402A8071AB = { 190 | isa = PBXGroup; 191 | children = ( 192 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 193 | B602A37183A2AB617C06AA2963E4619C /* Development Pods */, 194 | 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, 195 | AF277E81ECC22D2B61C9C190FCB9B08F /* Products */, 196 | 38724E3004D3F30C627BC9767C8EA99A /* Targets Support Files */, 197 | ); 198 | sourceTree = ""; 199 | }; 200 | 91DD01AA1E7D340275125135D819189C /* Pods-ExampleProjectUITests */ = { 201 | isa = PBXGroup; 202 | children = ( 203 | E48A0686530C3CC4D54FC6AD14A8CC57 /* Info.plist */, 204 | 6A748022CD4A95846A4654C7373FD1A1 /* Pods-ExampleProjectUITests.modulemap */, 205 | AE9E483B17B5E18D17881120FB7CD6E8 /* Pods-ExampleProjectUITests-acknowledgements.markdown */, 206 | D0CAB9C5F30BC1CF953E65F83756F4CB /* Pods-ExampleProjectUITests-acknowledgements.plist */, 207 | 40F13F53B74C4CAD7C18D6B4F109EC9E /* Pods-ExampleProjectUITests-dummy.m */, 208 | ABF16748939BD1324E6FA2311DCCE0FD /* Pods-ExampleProjectUITests-frameworks.sh */, 209 | B0895B036323DD6E5103DD2EA858009E /* Pods-ExampleProjectUITests-resources.sh */, 210 | 84B439359CFD94BF81AE36D6716C7B81 /* Pods-ExampleProjectUITests-umbrella.h */, 211 | F5349E3F9D212953AC3D16BDF09454AE /* Pods-ExampleProjectUITests.debug.xcconfig */, 212 | EA059FE5E296718A506AC78967C66B2F /* Pods-ExampleProjectUITests.release.xcconfig */, 213 | ); 214 | name = "Pods-ExampleProjectUITests"; 215 | path = "Target Support Files/Pods-ExampleProjectUITests"; 216 | sourceTree = ""; 217 | }; 218 | AF277E81ECC22D2B61C9C190FCB9B08F /* Products */ = { 219 | isa = PBXGroup; 220 | children = ( 221 | 7B36A7715054A9BF1D06EBA4B49F6866 /* Pods_ExampleProject.framework */, 222 | 16465008B2D203AE53DF5B089E81DA46 /* Pods_ExampleProjectTests.framework */, 223 | D9EB74556FECB1D212B696C4E5497458 /* Pods_ExampleProjectUITests.framework */, 224 | 5E12EA7EDF4ECD44311E090B98F61CDD /* TopicEventBus.framework */, 225 | ); 226 | name = Products; 227 | sourceTree = ""; 228 | }; 229 | B602A37183A2AB617C06AA2963E4619C /* Development Pods */ = { 230 | isa = PBXGroup; 231 | children = ( 232 | B997460D50D408F461CF78AF728519A7 /* TopicEventBus */, 233 | ); 234 | name = "Development Pods"; 235 | sourceTree = ""; 236 | }; 237 | B997460D50D408F461CF78AF728519A7 /* TopicEventBus */ = { 238 | isa = PBXGroup; 239 | children = ( 240 | FFBCF857DF59EBF707295C8BEE591B71 /* TopicEventBus.podspec */, 241 | CEF757747CCC104C7D0D35384A7225F0 /* Classes */, 242 | 1E22404B779ABA54B1DDE8EB4200A8A2 /* Pod */, 243 | E03E3B4462AEB72B06D9BDA22A9AA6B8 /* Support Files */, 244 | ); 245 | name = TopicEventBus; 246 | path = ../..; 247 | sourceTree = ""; 248 | }; 249 | CEF757747CCC104C7D0D35384A7225F0 /* Classes */ = { 250 | isa = PBXGroup; 251 | children = ( 252 | D584C36D3BE4D92DEE2753E71717F2B1 /* Subscribtion.swift */, 253 | 23116CB68FA56345001A00F09A02DA40 /* TopicEvent.swift */, 254 | B4E93F0367F90EEB0A0CBECBF1320F72 /* TopicEventBus.swift */, 255 | ); 256 | name = Classes; 257 | path = Classes; 258 | sourceTree = ""; 259 | }; 260 | E03E3B4462AEB72B06D9BDA22A9AA6B8 /* Support Files */ = { 261 | isa = PBXGroup; 262 | children = ( 263 | 7ED9122DE9C282A17E1A4C84C069B676 /* Info.plist */, 264 | C1FCA4AF72C06068D5AE1433B9EEC599 /* TopicEventBus.modulemap */, 265 | DC31023CA73D979B027D270A0A2C3FA6 /* TopicEventBus.xcconfig */, 266 | 5C56E1951DE95ABDF5843B85E8C7D6FD /* TopicEventBus-dummy.m */, 267 | D9A4456609EB50AC0AB1C067134C63F2 /* TopicEventBus-prefix.pch */, 268 | 40C01264A52BEE051F327AF33FC93A95 /* TopicEventBus-umbrella.h */, 269 | ); 270 | name = "Support Files"; 271 | path = "ExampleProject/Pods/Target Support Files/TopicEventBus"; 272 | sourceTree = ""; 273 | }; 274 | F8F0ACECD3E56FF3B2075D810595898D /* Pods-ExampleProject */ = { 275 | isa = PBXGroup; 276 | children = ( 277 | 7979D93188263AD26D26F38572D05762 /* Info.plist */, 278 | 8FC39854D5AEE31B712BF6A4D8B5A6FD /* Pods-ExampleProject.modulemap */, 279 | 812F4EB59EA1DD05A2E8491A93912699 /* Pods-ExampleProject-acknowledgements.markdown */, 280 | D4AED29A5A115E6697EA5A257A5A3CCF /* Pods-ExampleProject-acknowledgements.plist */, 281 | 4027D1075755006664B9BA85302F1497 /* Pods-ExampleProject-dummy.m */, 282 | DAA6439163A64E1E718CDB36FA4C0438 /* Pods-ExampleProject-frameworks.sh */, 283 | AC2B7B86E28D6F816D0D737738A6BB39 /* Pods-ExampleProject-resources.sh */, 284 | 736CA9AF221D1D639191FB5C1B0C97F0 /* Pods-ExampleProject-umbrella.h */, 285 | A2FE417113181B928D0BB30805E2ECD6 /* Pods-ExampleProject.debug.xcconfig */, 286 | E744D17C2DB9B144F1FA6E998188A304 /* Pods-ExampleProject.release.xcconfig */, 287 | ); 288 | name = "Pods-ExampleProject"; 289 | path = "Target Support Files/Pods-ExampleProject"; 290 | sourceTree = ""; 291 | }; 292 | /* End PBXGroup section */ 293 | 294 | /* Begin PBXHeadersBuildPhase section */ 295 | 7D950C889501EB45B6E5B2B4A9C85A50 /* Headers */ = { 296 | isa = PBXHeadersBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | 7B321E7D5C38D65BD12A77513BE03C03 /* Pods-ExampleProject-umbrella.h in Headers */, 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | }; 303 | A8601FEC0E96C2AEC12CA56E15A36D68 /* Headers */ = { 304 | isa = PBXHeadersBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | C4D2DB56B30EE4C20B95F5FF0D8E12DC /* Pods-ExampleProjectUITests-umbrella.h in Headers */, 308 | ); 309 | runOnlyForDeploymentPostprocessing = 0; 310 | }; 311 | AC22FA92115C7527701467F3AA5129E9 /* Headers */ = { 312 | isa = PBXHeadersBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | 51D166352C67301CB6D04411B043612B /* TopicEventBus-umbrella.h in Headers */, 316 | ); 317 | runOnlyForDeploymentPostprocessing = 0; 318 | }; 319 | AE48F4E1F6E96C0778C7E1AA5BC073E8 /* Headers */ = { 320 | isa = PBXHeadersBuildPhase; 321 | buildActionMask = 2147483647; 322 | files = ( 323 | 0914624577CF723AEF42EB7037A60054 /* Pods-ExampleProjectTests-umbrella.h in Headers */, 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | }; 327 | /* End PBXHeadersBuildPhase section */ 328 | 329 | /* Begin PBXNativeTarget section */ 330 | 2976EF515EA7E229E740469132F3CDB2 /* Pods-ExampleProjectTests */ = { 331 | isa = PBXNativeTarget; 332 | buildConfigurationList = 83E70652B7BA137B01F82540B73D3935 /* Build configuration list for PBXNativeTarget "Pods-ExampleProjectTests" */; 333 | buildPhases = ( 334 | 602BE0854827A883DC6EB0E2BAD8B00A /* Sources */, 335 | 3E21DFBFA19AD3FA588770F9E1338FF5 /* Frameworks */, 336 | AE48F4E1F6E96C0778C7E1AA5BC073E8 /* Headers */, 337 | ); 338 | buildRules = ( 339 | ); 340 | dependencies = ( 341 | D2C8F48E3162EB44B1D37872697464D3 /* PBXTargetDependency */, 342 | ); 343 | name = "Pods-ExampleProjectTests"; 344 | productName = "Pods-ExampleProjectTests"; 345 | productReference = 16465008B2D203AE53DF5B089E81DA46 /* Pods_ExampleProjectTests.framework */; 346 | productType = "com.apple.product-type.framework"; 347 | }; 348 | 53FA43F512404BBA183A4DB1A5E10FDB /* Pods-ExampleProject */ = { 349 | isa = PBXNativeTarget; 350 | buildConfigurationList = FA2C4AC76A0381CD4685B50EC5312D0F /* Build configuration list for PBXNativeTarget "Pods-ExampleProject" */; 351 | buildPhases = ( 352 | 45816CD74035CA25D8962F4EF0E5EE5A /* Sources */, 353 | 49CA7396C5DA73E1B5F04F4A8B90991F /* Frameworks */, 354 | 7D950C889501EB45B6E5B2B4A9C85A50 /* Headers */, 355 | ); 356 | buildRules = ( 357 | ); 358 | dependencies = ( 359 | 3C9FAF315D424F621ACAA994F30A8420 /* PBXTargetDependency */, 360 | ); 361 | name = "Pods-ExampleProject"; 362 | productName = "Pods-ExampleProject"; 363 | productReference = 7B36A7715054A9BF1D06EBA4B49F6866 /* Pods_ExampleProject.framework */; 364 | productType = "com.apple.product-type.framework"; 365 | }; 366 | 74EE01D7897A6267C839812D8977D3FB /* TopicEventBus */ = { 367 | isa = PBXNativeTarget; 368 | buildConfigurationList = F1E341390601913433B5B81BCA5305AD /* Build configuration list for PBXNativeTarget "TopicEventBus" */; 369 | buildPhases = ( 370 | C61D33148B44A595D2287C21215C5C9C /* Sources */, 371 | 09134CDDB8DC41F42CE0CEDF6584938F /* Frameworks */, 372 | AC22FA92115C7527701467F3AA5129E9 /* Headers */, 373 | ); 374 | buildRules = ( 375 | ); 376 | dependencies = ( 377 | ); 378 | name = TopicEventBus; 379 | productName = TopicEventBus; 380 | productReference = 5E12EA7EDF4ECD44311E090B98F61CDD /* TopicEventBus.framework */; 381 | productType = "com.apple.product-type.framework"; 382 | }; 383 | 78B91A2BDA868A0EEEA3F7CBE5F87798 /* Pods-ExampleProjectUITests */ = { 384 | isa = PBXNativeTarget; 385 | buildConfigurationList = FBEE78199C674F01D8277CE666FB24D4 /* Build configuration list for PBXNativeTarget "Pods-ExampleProjectUITests" */; 386 | buildPhases = ( 387 | 464A3649A926DC949561B864BCDA2DDA /* Sources */, 388 | 91803F8766E91C7C9EC7819E27C69077 /* Frameworks */, 389 | A8601FEC0E96C2AEC12CA56E15A36D68 /* Headers */, 390 | ); 391 | buildRules = ( 392 | ); 393 | dependencies = ( 394 | ); 395 | name = "Pods-ExampleProjectUITests"; 396 | productName = "Pods-ExampleProjectUITests"; 397 | productReference = D9EB74556FECB1D212B696C4E5497458 /* Pods_ExampleProjectUITests.framework */; 398 | productType = "com.apple.product-type.framework"; 399 | }; 400 | /* End PBXNativeTarget section */ 401 | 402 | /* Begin PBXProject section */ 403 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 404 | isa = PBXProject; 405 | attributes = { 406 | LastSwiftUpdateCheck = 0930; 407 | LastUpgradeCheck = 0930; 408 | }; 409 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 410 | compatibilityVersion = "Xcode 3.2"; 411 | developmentRegion = English; 412 | hasScannedForEncodings = 0; 413 | knownRegions = ( 414 | en, 415 | ); 416 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 417 | productRefGroup = AF277E81ECC22D2B61C9C190FCB9B08F /* Products */; 418 | projectDirPath = ""; 419 | projectRoot = ""; 420 | targets = ( 421 | 53FA43F512404BBA183A4DB1A5E10FDB /* Pods-ExampleProject */, 422 | 2976EF515EA7E229E740469132F3CDB2 /* Pods-ExampleProjectTests */, 423 | 78B91A2BDA868A0EEEA3F7CBE5F87798 /* Pods-ExampleProjectUITests */, 424 | 74EE01D7897A6267C839812D8977D3FB /* TopicEventBus */, 425 | ); 426 | }; 427 | /* End PBXProject section */ 428 | 429 | /* Begin PBXSourcesBuildPhase section */ 430 | 45816CD74035CA25D8962F4EF0E5EE5A /* Sources */ = { 431 | isa = PBXSourcesBuildPhase; 432 | buildActionMask = 2147483647; 433 | files = ( 434 | 5E93B7001D0430166AE8773E0D90EF4B /* Pods-ExampleProject-dummy.m in Sources */, 435 | ); 436 | runOnlyForDeploymentPostprocessing = 0; 437 | }; 438 | 464A3649A926DC949561B864BCDA2DDA /* Sources */ = { 439 | isa = PBXSourcesBuildPhase; 440 | buildActionMask = 2147483647; 441 | files = ( 442 | 1D3290B30D8C07DB8AAA276D71F4DAD5 /* Pods-ExampleProjectUITests-dummy.m in Sources */, 443 | ); 444 | runOnlyForDeploymentPostprocessing = 0; 445 | }; 446 | 602BE0854827A883DC6EB0E2BAD8B00A /* Sources */ = { 447 | isa = PBXSourcesBuildPhase; 448 | buildActionMask = 2147483647; 449 | files = ( 450 | 449B5AABE9DEFCC6CAE70954DD2A4F0F /* Pods-ExampleProjectTests-dummy.m in Sources */, 451 | ); 452 | runOnlyForDeploymentPostprocessing = 0; 453 | }; 454 | C61D33148B44A595D2287C21215C5C9C /* Sources */ = { 455 | isa = PBXSourcesBuildPhase; 456 | buildActionMask = 2147483647; 457 | files = ( 458 | 829631C7CD5DAED98A56C31AC3FCED67 /* Subscribtion.swift in Sources */, 459 | 5A3C7D782B82A5E13DF2995B70C37F66 /* TopicEvent.swift in Sources */, 460 | 4D387978A7339B4402D497206BF2C928 /* TopicEventBus-dummy.m in Sources */, 461 | 1A0C0106E8E511E2F2D3B4797B0C5B67 /* TopicEventBus.podspec in Sources */, 462 | 45C48DF28CD7D709BCB83A590E9CD95E /* TopicEventBus.swift in Sources */, 463 | ); 464 | runOnlyForDeploymentPostprocessing = 0; 465 | }; 466 | /* End PBXSourcesBuildPhase section */ 467 | 468 | /* Begin PBXTargetDependency section */ 469 | 3C9FAF315D424F621ACAA994F30A8420 /* PBXTargetDependency */ = { 470 | isa = PBXTargetDependency; 471 | name = TopicEventBus; 472 | target = 74EE01D7897A6267C839812D8977D3FB /* TopicEventBus */; 473 | targetProxy = 6E44119709DFE59E6131FCD258106D30 /* PBXContainerItemProxy */; 474 | }; 475 | D2C8F48E3162EB44B1D37872697464D3 /* PBXTargetDependency */ = { 476 | isa = PBXTargetDependency; 477 | name = TopicEventBus; 478 | target = 74EE01D7897A6267C839812D8977D3FB /* TopicEventBus */; 479 | targetProxy = 6C4736156F9036CC1BB3270E40F94BF5 /* PBXContainerItemProxy */; 480 | }; 481 | /* End PBXTargetDependency section */ 482 | 483 | /* Begin XCBuildConfiguration section */ 484 | 00A06BEB3987B2117D563D0D7CF7ACC1 /* Release */ = { 485 | isa = XCBuildConfiguration; 486 | buildSettings = { 487 | ALWAYS_SEARCH_USER_PATHS = NO; 488 | CLANG_ANALYZER_NONNULL = YES; 489 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 490 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 491 | CLANG_CXX_LIBRARY = "libc++"; 492 | CLANG_ENABLE_MODULES = YES; 493 | CLANG_ENABLE_OBJC_ARC = YES; 494 | CLANG_ENABLE_OBJC_WEAK = YES; 495 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 496 | CLANG_WARN_BOOL_CONVERSION = YES; 497 | CLANG_WARN_COMMA = YES; 498 | CLANG_WARN_CONSTANT_CONVERSION = YES; 499 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 500 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 501 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 502 | CLANG_WARN_EMPTY_BODY = YES; 503 | CLANG_WARN_ENUM_CONVERSION = YES; 504 | CLANG_WARN_INFINITE_RECURSION = YES; 505 | CLANG_WARN_INT_CONVERSION = YES; 506 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 507 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 508 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 509 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 510 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 511 | CLANG_WARN_STRICT_PROTOTYPES = YES; 512 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 513 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 514 | CLANG_WARN_UNREACHABLE_CODE = YES; 515 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 516 | CODE_SIGNING_REQUIRED = NO; 517 | COPY_PHASE_STRIP = NO; 518 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 519 | ENABLE_NS_ASSERTIONS = NO; 520 | ENABLE_STRICT_OBJC_MSGSEND = YES; 521 | GCC_C_LANGUAGE_STANDARD = gnu11; 522 | GCC_NO_COMMON_BLOCKS = YES; 523 | GCC_PREPROCESSOR_DEFINITIONS = ( 524 | "POD_CONFIGURATION_RELEASE=1", 525 | "$(inherited)", 526 | ); 527 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 528 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 529 | GCC_WARN_UNDECLARED_SELECTOR = YES; 530 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 531 | GCC_WARN_UNUSED_FUNCTION = YES; 532 | GCC_WARN_UNUSED_VARIABLE = YES; 533 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 534 | MTL_ENABLE_DEBUG_INFO = NO; 535 | PRODUCT_NAME = "$(TARGET_NAME)"; 536 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 537 | STRIP_INSTALLED_PRODUCT = NO; 538 | SYMROOT = "${SRCROOT}/../build"; 539 | }; 540 | name = Release; 541 | }; 542 | 58006BDB5E80F95E24CE8DA9A8024D1C /* Debug */ = { 543 | isa = XCBuildConfiguration; 544 | baseConfigurationReference = DC31023CA73D979B027D270A0A2C3FA6 /* TopicEventBus.xcconfig */; 545 | buildSettings = { 546 | CODE_SIGN_IDENTITY = ""; 547 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 548 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 549 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 550 | CURRENT_PROJECT_VERSION = 1; 551 | DEFINES_MODULE = YES; 552 | DYLIB_COMPATIBILITY_VERSION = 1; 553 | DYLIB_CURRENT_VERSION = 1; 554 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 555 | GCC_PREFIX_HEADER = "Target Support Files/TopicEventBus/TopicEventBus-prefix.pch"; 556 | INFOPLIST_FILE = "Target Support Files/TopicEventBus/Info.plist"; 557 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 558 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 559 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 560 | MODULEMAP_FILE = "Target Support Files/TopicEventBus/TopicEventBus.modulemap"; 561 | PRODUCT_NAME = TopicEventBus; 562 | SDKROOT = iphoneos; 563 | SKIP_INSTALL = YES; 564 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 565 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 566 | SWIFT_VERSION = 4.0; 567 | TARGETED_DEVICE_FAMILY = "1,2"; 568 | VERSIONING_SYSTEM = "apple-generic"; 569 | VERSION_INFO_PREFIX = ""; 570 | }; 571 | name = Debug; 572 | }; 573 | 5CE6A38251759BA21543C4C43E07AB08 /* Release */ = { 574 | isa = XCBuildConfiguration; 575 | baseConfigurationReference = DC31023CA73D979B027D270A0A2C3FA6 /* TopicEventBus.xcconfig */; 576 | buildSettings = { 577 | CODE_SIGN_IDENTITY = ""; 578 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 579 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 580 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 581 | CURRENT_PROJECT_VERSION = 1; 582 | DEFINES_MODULE = YES; 583 | DYLIB_COMPATIBILITY_VERSION = 1; 584 | DYLIB_CURRENT_VERSION = 1; 585 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 586 | GCC_PREFIX_HEADER = "Target Support Files/TopicEventBus/TopicEventBus-prefix.pch"; 587 | INFOPLIST_FILE = "Target Support Files/TopicEventBus/Info.plist"; 588 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 589 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 590 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 591 | MODULEMAP_FILE = "Target Support Files/TopicEventBus/TopicEventBus.modulemap"; 592 | PRODUCT_NAME = TopicEventBus; 593 | SDKROOT = iphoneos; 594 | SKIP_INSTALL = YES; 595 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 596 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 597 | SWIFT_VERSION = 4.0; 598 | TARGETED_DEVICE_FAMILY = "1,2"; 599 | VALIDATE_PRODUCT = YES; 600 | VERSIONING_SYSTEM = "apple-generic"; 601 | VERSION_INFO_PREFIX = ""; 602 | }; 603 | name = Release; 604 | }; 605 | 6E61E5F742C27AA13F375AF255DCB7A2 /* Debug */ = { 606 | isa = XCBuildConfiguration; 607 | baseConfigurationReference = F5349E3F9D212953AC3D16BDF09454AE /* Pods-ExampleProjectUITests.debug.xcconfig */; 608 | buildSettings = { 609 | CLANG_ENABLE_OBJC_WEAK = NO; 610 | CODE_SIGN_IDENTITY = ""; 611 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 612 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 613 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 614 | CURRENT_PROJECT_VERSION = 1; 615 | DEFINES_MODULE = YES; 616 | DYLIB_COMPATIBILITY_VERSION = 1; 617 | DYLIB_CURRENT_VERSION = 1; 618 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 619 | INFOPLIST_FILE = "Target Support Files/Pods-ExampleProjectUITests/Info.plist"; 620 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 621 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 622 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 623 | MACH_O_TYPE = staticlib; 624 | MODULEMAP_FILE = "Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.modulemap"; 625 | OTHER_LDFLAGS = ""; 626 | OTHER_LIBTOOLFLAGS = ""; 627 | PODS_ROOT = "$(SRCROOT)"; 628 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 629 | PRODUCT_NAME = Pods_ExampleProjectUITests; 630 | SDKROOT = iphoneos; 631 | SKIP_INSTALL = YES; 632 | TARGETED_DEVICE_FAMILY = "1,2"; 633 | VERSIONING_SYSTEM = "apple-generic"; 634 | VERSION_INFO_PREFIX = ""; 635 | }; 636 | name = Debug; 637 | }; 638 | BCB60224508ECA7084C3F10F8F882CF5 /* Debug */ = { 639 | isa = XCBuildConfiguration; 640 | baseConfigurationReference = 08AB415BD22C3445BC41E77A2CCBB4D2 /* Pods-ExampleProjectTests.debug.xcconfig */; 641 | buildSettings = { 642 | CLANG_ENABLE_OBJC_WEAK = NO; 643 | CODE_SIGN_IDENTITY = ""; 644 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 645 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 646 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 647 | CURRENT_PROJECT_VERSION = 1; 648 | DEFINES_MODULE = YES; 649 | DYLIB_COMPATIBILITY_VERSION = 1; 650 | DYLIB_CURRENT_VERSION = 1; 651 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 652 | INFOPLIST_FILE = "Target Support Files/Pods-ExampleProjectTests/Info.plist"; 653 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 654 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 655 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 656 | MACH_O_TYPE = staticlib; 657 | MODULEMAP_FILE = "Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.modulemap"; 658 | OTHER_LDFLAGS = ""; 659 | OTHER_LIBTOOLFLAGS = ""; 660 | PODS_ROOT = "$(SRCROOT)"; 661 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 662 | PRODUCT_NAME = Pods_ExampleProjectTests; 663 | SDKROOT = iphoneos; 664 | SKIP_INSTALL = YES; 665 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 666 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 667 | TARGETED_DEVICE_FAMILY = "1,2"; 668 | VERSIONING_SYSTEM = "apple-generic"; 669 | VERSION_INFO_PREFIX = ""; 670 | }; 671 | name = Debug; 672 | }; 673 | C72302CF968D7BD094FBD702AD9ADACB /* Release */ = { 674 | isa = XCBuildConfiguration; 675 | baseConfigurationReference = 17E163FFEFFCAEF1DA531F8A5012C6B4 /* Pods-ExampleProjectTests.release.xcconfig */; 676 | buildSettings = { 677 | CLANG_ENABLE_OBJC_WEAK = NO; 678 | CODE_SIGN_IDENTITY = ""; 679 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 680 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 681 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 682 | CURRENT_PROJECT_VERSION = 1; 683 | DEFINES_MODULE = YES; 684 | DYLIB_COMPATIBILITY_VERSION = 1; 685 | DYLIB_CURRENT_VERSION = 1; 686 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 687 | INFOPLIST_FILE = "Target Support Files/Pods-ExampleProjectTests/Info.plist"; 688 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 689 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 690 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 691 | MACH_O_TYPE = staticlib; 692 | MODULEMAP_FILE = "Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.modulemap"; 693 | OTHER_LDFLAGS = ""; 694 | OTHER_LIBTOOLFLAGS = ""; 695 | PODS_ROOT = "$(SRCROOT)"; 696 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 697 | PRODUCT_NAME = Pods_ExampleProjectTests; 698 | SDKROOT = iphoneos; 699 | SKIP_INSTALL = YES; 700 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 701 | TARGETED_DEVICE_FAMILY = "1,2"; 702 | VALIDATE_PRODUCT = YES; 703 | VERSIONING_SYSTEM = "apple-generic"; 704 | VERSION_INFO_PREFIX = ""; 705 | }; 706 | name = Release; 707 | }; 708 | CCF405426857C065123D950465A8AEFA /* Debug */ = { 709 | isa = XCBuildConfiguration; 710 | buildSettings = { 711 | ALWAYS_SEARCH_USER_PATHS = NO; 712 | CLANG_ANALYZER_NONNULL = YES; 713 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 714 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 715 | CLANG_CXX_LIBRARY = "libc++"; 716 | CLANG_ENABLE_MODULES = YES; 717 | CLANG_ENABLE_OBJC_ARC = YES; 718 | CLANG_ENABLE_OBJC_WEAK = YES; 719 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 720 | CLANG_WARN_BOOL_CONVERSION = YES; 721 | CLANG_WARN_COMMA = YES; 722 | CLANG_WARN_CONSTANT_CONVERSION = YES; 723 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 724 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 725 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 726 | CLANG_WARN_EMPTY_BODY = YES; 727 | CLANG_WARN_ENUM_CONVERSION = YES; 728 | CLANG_WARN_INFINITE_RECURSION = YES; 729 | CLANG_WARN_INT_CONVERSION = YES; 730 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 731 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 732 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 733 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 734 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 735 | CLANG_WARN_STRICT_PROTOTYPES = YES; 736 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 737 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 738 | CLANG_WARN_UNREACHABLE_CODE = YES; 739 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 740 | CODE_SIGNING_REQUIRED = NO; 741 | COPY_PHASE_STRIP = NO; 742 | DEBUG_INFORMATION_FORMAT = dwarf; 743 | ENABLE_STRICT_OBJC_MSGSEND = YES; 744 | ENABLE_TESTABILITY = YES; 745 | GCC_C_LANGUAGE_STANDARD = gnu11; 746 | GCC_DYNAMIC_NO_PIC = NO; 747 | GCC_NO_COMMON_BLOCKS = YES; 748 | GCC_OPTIMIZATION_LEVEL = 0; 749 | GCC_PREPROCESSOR_DEFINITIONS = ( 750 | "POD_CONFIGURATION_DEBUG=1", 751 | "DEBUG=1", 752 | "$(inherited)", 753 | ); 754 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 755 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 756 | GCC_WARN_UNDECLARED_SELECTOR = YES; 757 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 758 | GCC_WARN_UNUSED_FUNCTION = YES; 759 | GCC_WARN_UNUSED_VARIABLE = YES; 760 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 761 | MTL_ENABLE_DEBUG_INFO = YES; 762 | ONLY_ACTIVE_ARCH = YES; 763 | PRODUCT_NAME = "$(TARGET_NAME)"; 764 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 765 | STRIP_INSTALLED_PRODUCT = NO; 766 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 767 | SYMROOT = "${SRCROOT}/../build"; 768 | }; 769 | name = Debug; 770 | }; 771 | D7F84D200DF17E1BEB78FA496E7F7071 /* Release */ = { 772 | isa = XCBuildConfiguration; 773 | baseConfigurationReference = E744D17C2DB9B144F1FA6E998188A304 /* Pods-ExampleProject.release.xcconfig */; 774 | buildSettings = { 775 | CLANG_ENABLE_OBJC_WEAK = NO; 776 | CODE_SIGN_IDENTITY = ""; 777 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 778 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 779 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 780 | CURRENT_PROJECT_VERSION = 1; 781 | DEFINES_MODULE = YES; 782 | DYLIB_COMPATIBILITY_VERSION = 1; 783 | DYLIB_CURRENT_VERSION = 1; 784 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 785 | INFOPLIST_FILE = "Target Support Files/Pods-ExampleProject/Info.plist"; 786 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 787 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 788 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 789 | MACH_O_TYPE = staticlib; 790 | MODULEMAP_FILE = "Target Support Files/Pods-ExampleProject/Pods-ExampleProject.modulemap"; 791 | OTHER_LDFLAGS = ""; 792 | OTHER_LIBTOOLFLAGS = ""; 793 | PODS_ROOT = "$(SRCROOT)"; 794 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 795 | PRODUCT_NAME = Pods_ExampleProject; 796 | SDKROOT = iphoneos; 797 | SKIP_INSTALL = YES; 798 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 799 | TARGETED_DEVICE_FAMILY = "1,2"; 800 | VALIDATE_PRODUCT = YES; 801 | VERSIONING_SYSTEM = "apple-generic"; 802 | VERSION_INFO_PREFIX = ""; 803 | }; 804 | name = Release; 805 | }; 806 | E90DFBBFEAEC73B885297D2EA2339DF9 /* Debug */ = { 807 | isa = XCBuildConfiguration; 808 | baseConfigurationReference = A2FE417113181B928D0BB30805E2ECD6 /* Pods-ExampleProject.debug.xcconfig */; 809 | buildSettings = { 810 | CLANG_ENABLE_OBJC_WEAK = NO; 811 | CODE_SIGN_IDENTITY = ""; 812 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 813 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 814 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 815 | CURRENT_PROJECT_VERSION = 1; 816 | DEFINES_MODULE = YES; 817 | DYLIB_COMPATIBILITY_VERSION = 1; 818 | DYLIB_CURRENT_VERSION = 1; 819 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 820 | INFOPLIST_FILE = "Target Support Files/Pods-ExampleProject/Info.plist"; 821 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 822 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 823 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 824 | MACH_O_TYPE = staticlib; 825 | MODULEMAP_FILE = "Target Support Files/Pods-ExampleProject/Pods-ExampleProject.modulemap"; 826 | OTHER_LDFLAGS = ""; 827 | OTHER_LIBTOOLFLAGS = ""; 828 | PODS_ROOT = "$(SRCROOT)"; 829 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 830 | PRODUCT_NAME = Pods_ExampleProject; 831 | SDKROOT = iphoneos; 832 | SKIP_INSTALL = YES; 833 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 834 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 835 | TARGETED_DEVICE_FAMILY = "1,2"; 836 | VERSIONING_SYSTEM = "apple-generic"; 837 | VERSION_INFO_PREFIX = ""; 838 | }; 839 | name = Debug; 840 | }; 841 | F777F60986D424261BC4919889201DD5 /* Release */ = { 842 | isa = XCBuildConfiguration; 843 | baseConfigurationReference = EA059FE5E296718A506AC78967C66B2F /* Pods-ExampleProjectUITests.release.xcconfig */; 844 | buildSettings = { 845 | CLANG_ENABLE_OBJC_WEAK = NO; 846 | CODE_SIGN_IDENTITY = ""; 847 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 848 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 849 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 850 | CURRENT_PROJECT_VERSION = 1; 851 | DEFINES_MODULE = YES; 852 | DYLIB_COMPATIBILITY_VERSION = 1; 853 | DYLIB_CURRENT_VERSION = 1; 854 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 855 | INFOPLIST_FILE = "Target Support Files/Pods-ExampleProjectUITests/Info.plist"; 856 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 857 | IPHONEOS_DEPLOYMENT_TARGET = 11.4; 858 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 859 | MACH_O_TYPE = staticlib; 860 | MODULEMAP_FILE = "Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.modulemap"; 861 | OTHER_LDFLAGS = ""; 862 | OTHER_LIBTOOLFLAGS = ""; 863 | PODS_ROOT = "$(SRCROOT)"; 864 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 865 | PRODUCT_NAME = Pods_ExampleProjectUITests; 866 | SDKROOT = iphoneos; 867 | SKIP_INSTALL = YES; 868 | TARGETED_DEVICE_FAMILY = "1,2"; 869 | VALIDATE_PRODUCT = YES; 870 | VERSIONING_SYSTEM = "apple-generic"; 871 | VERSION_INFO_PREFIX = ""; 872 | }; 873 | name = Release; 874 | }; 875 | /* End XCBuildConfiguration section */ 876 | 877 | /* Begin XCConfigurationList section */ 878 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 879 | isa = XCConfigurationList; 880 | buildConfigurations = ( 881 | CCF405426857C065123D950465A8AEFA /* Debug */, 882 | 00A06BEB3987B2117D563D0D7CF7ACC1 /* Release */, 883 | ); 884 | defaultConfigurationIsVisible = 0; 885 | defaultConfigurationName = Release; 886 | }; 887 | 83E70652B7BA137B01F82540B73D3935 /* Build configuration list for PBXNativeTarget "Pods-ExampleProjectTests" */ = { 888 | isa = XCConfigurationList; 889 | buildConfigurations = ( 890 | BCB60224508ECA7084C3F10F8F882CF5 /* Debug */, 891 | C72302CF968D7BD094FBD702AD9ADACB /* Release */, 892 | ); 893 | defaultConfigurationIsVisible = 0; 894 | defaultConfigurationName = Release; 895 | }; 896 | F1E341390601913433B5B81BCA5305AD /* Build configuration list for PBXNativeTarget "TopicEventBus" */ = { 897 | isa = XCConfigurationList; 898 | buildConfigurations = ( 899 | 58006BDB5E80F95E24CE8DA9A8024D1C /* Debug */, 900 | 5CE6A38251759BA21543C4C43E07AB08 /* Release */, 901 | ); 902 | defaultConfigurationIsVisible = 0; 903 | defaultConfigurationName = Release; 904 | }; 905 | FA2C4AC76A0381CD4685B50EC5312D0F /* Build configuration list for PBXNativeTarget "Pods-ExampleProject" */ = { 906 | isa = XCConfigurationList; 907 | buildConfigurations = ( 908 | E90DFBBFEAEC73B885297D2EA2339DF9 /* Debug */, 909 | D7F84D200DF17E1BEB78FA496E7F7071 /* Release */, 910 | ); 911 | defaultConfigurationIsVisible = 0; 912 | defaultConfigurationName = Release; 913 | }; 914 | FBEE78199C674F01D8277CE666FB24D4 /* Build configuration list for PBXNativeTarget "Pods-ExampleProjectUITests" */ = { 915 | isa = XCConfigurationList; 916 | buildConfigurations = ( 917 | 6E61E5F742C27AA13F375AF255DCB7A2 /* Debug */, 918 | F777F60986D424261BC4919889201DD5 /* Release */, 919 | ); 920 | defaultConfigurationIsVisible = 0; 921 | defaultConfigurationName = Release; 922 | }; 923 | /* End XCConfigurationList section */ 924 | }; 925 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 926 | } 927 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Pods.xcodeproj/xcuserdata/matancohen.xcuserdatad/xcschemes/Pods-ExampleProject.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Pods.xcodeproj/xcuserdata/matancohen.xcuserdatad/xcschemes/Pods-ExampleProjectTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Pods.xcodeproj/xcuserdata/matancohen.xcuserdatad/xcschemes/Pods-ExampleProjectUITests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Pods.xcodeproj/xcuserdata/matancohen.xcuserdatad/xcschemes/TopicEventBus.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Pods.xcodeproj/xcuserdata/matancohen.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-ExampleProject.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | Pods-ExampleProjectTests.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 1 20 | 21 | Pods-ExampleProjectUITests.xcscheme 22 | 23 | isShown 24 | 25 | orderHint 26 | 2 27 | 28 | TopicEventBus.xcscheme 29 | 30 | isShown 31 | 32 | orderHint 33 | 3 34 | 35 | 36 | SuppressBuildableAutocreation 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## TopicEventBus 5 | 6 | MIT License 7 | 8 | Copyright (c) 2018 Matan Cohen 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2018 Matan Cohen 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | License 39 | MIT 40 | Title 41 | TopicEventBus 42 | Type 43 | PSGroupSpecifier 44 | 45 | 46 | FooterText 47 | Generated by CocoaPods - https://cocoapods.org 48 | Title 49 | 50 | Type 51 | PSGroupSpecifier 52 | 53 | 54 | StringsTable 55 | Acknowledgements 56 | Title 57 | Acknowledgements 58 | 59 | 60 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ExampleProject : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ExampleProject 5 | @end 6 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # Used as a return value for each invocation of `strip_invalid_archs` function. 10 | STRIP_BINARY_RETVAL=0 11 | 12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 15 | 16 | # Copies and strips a vendored framework 17 | install_framework() 18 | { 19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 20 | local source="${BUILT_PRODUCTS_DIR}/$1" 21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 23 | elif [ -r "$1" ]; then 24 | local source="$1" 25 | fi 26 | 27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 28 | 29 | if [ -L "${source}" ]; then 30 | echo "Symlinked..." 31 | source="$(readlink "${source}")" 32 | fi 33 | 34 | # Use filter instead of exclude so missing patterns don't throw errors. 35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 37 | 38 | local basename 39 | basename="$(basename -s .framework "$1")" 40 | binary="${destination}/${basename}.framework/${basename}" 41 | if ! [ -r "$binary" ]; then 42 | binary="${destination}/${basename}" 43 | fi 44 | 45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 47 | strip_invalid_archs "$binary" 48 | fi 49 | 50 | # Resign the code if required by the build settings to avoid unstable apps 51 | code_sign_if_enabled "${destination}/$(basename "$1")" 52 | 53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 55 | local swift_runtime_libs 56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 57 | for lib in $swift_runtime_libs; do 58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 60 | code_sign_if_enabled "${destination}/${lib}" 61 | done 62 | fi 63 | } 64 | 65 | # Copies and strips a vendored dSYM 66 | install_dsym() { 67 | local source="$1" 68 | if [ -r "$source" ]; then 69 | # Copy the dSYM into a the targets temp dir. 70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 72 | 73 | local basename 74 | basename="$(basename -s .framework.dSYM "$source")" 75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 76 | 77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 79 | strip_invalid_archs "$binary" 80 | fi 81 | 82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 83 | # Move the stripped file into its final destination. 84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 86 | else 87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 89 | fi 90 | fi 91 | } 92 | 93 | # Signs a framework with the provided identity 94 | code_sign_if_enabled() { 95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 96 | # Use the current code_sign_identitiy 97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 99 | 100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 101 | code_sign_cmd="$code_sign_cmd &" 102 | fi 103 | echo "$code_sign_cmd" 104 | eval "$code_sign_cmd" 105 | fi 106 | } 107 | 108 | # Strip invalid architectures 109 | strip_invalid_archs() { 110 | binary="$1" 111 | # Get architectures for current target binary 112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 113 | # Intersect them with the architectures we are building for 114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 115 | # If there are no archs supported by this binary then warn the user 116 | if [[ -z "$intersected_archs" ]]; then 117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 118 | STRIP_BINARY_RETVAL=0 119 | return 120 | fi 121 | stripped="" 122 | for arch in $binary_archs; do 123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 124 | # Strip non-valid architectures in-place 125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 126 | stripped="$stripped $arch" 127 | fi 128 | done 129 | if [[ "$stripped" ]]; then 130 | echo "Stripped $binary of architectures:$stripped" 131 | fi 132 | STRIP_BINARY_RETVAL=1 133 | } 134 | 135 | 136 | if [[ "$CONFIGURATION" == "Debug" ]]; then 137 | install_framework "${BUILT_PRODUCTS_DIR}/TopicEventBus/TopicEventBus.framework" 138 | fi 139 | if [[ "$CONFIGURATION" == "Release" ]]; then 140 | install_framework "${BUILT_PRODUCTS_DIR}/TopicEventBus/TopicEventBus.framework" 141 | fi 142 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 143 | wait 144 | fi 145 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ExampleProjectVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ExampleProjectVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus/TopicEventBus.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "TopicEventBus" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ExampleProject { 2 | umbrella header "Pods-ExampleProject-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProject/Pods-ExampleProject.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus/TopicEventBus.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "TopicEventBus" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## TopicEventBus 5 | 6 | MIT License 7 | 8 | Copyright (c) 2018 Matan Cohen 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2018 Matan Cohen 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | License 39 | MIT 40 | Title 41 | TopicEventBus 42 | Type 43 | PSGroupSpecifier 44 | 45 | 46 | FooterText 47 | Generated by CocoaPods - https://cocoapods.org 48 | Title 49 | 50 | Type 51 | PSGroupSpecifier 52 | 53 | 54 | StringsTable 55 | Acknowledgements 56 | Title 57 | Acknowledgements 58 | 59 | 60 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ExampleProjectTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ExampleProjectTests 5 | @end 6 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # Used as a return value for each invocation of `strip_invalid_archs` function. 10 | STRIP_BINARY_RETVAL=0 11 | 12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 15 | 16 | # Copies and strips a vendored framework 17 | install_framework() 18 | { 19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 20 | local source="${BUILT_PRODUCTS_DIR}/$1" 21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 23 | elif [ -r "$1" ]; then 24 | local source="$1" 25 | fi 26 | 27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 28 | 29 | if [ -L "${source}" ]; then 30 | echo "Symlinked..." 31 | source="$(readlink "${source}")" 32 | fi 33 | 34 | # Use filter instead of exclude so missing patterns don't throw errors. 35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 37 | 38 | local basename 39 | basename="$(basename -s .framework "$1")" 40 | binary="${destination}/${basename}.framework/${basename}" 41 | if ! [ -r "$binary" ]; then 42 | binary="${destination}/${basename}" 43 | fi 44 | 45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 47 | strip_invalid_archs "$binary" 48 | fi 49 | 50 | # Resign the code if required by the build settings to avoid unstable apps 51 | code_sign_if_enabled "${destination}/$(basename "$1")" 52 | 53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 55 | local swift_runtime_libs 56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 57 | for lib in $swift_runtime_libs; do 58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 60 | code_sign_if_enabled "${destination}/${lib}" 61 | done 62 | fi 63 | } 64 | 65 | # Copies and strips a vendored dSYM 66 | install_dsym() { 67 | local source="$1" 68 | if [ -r "$source" ]; then 69 | # Copy the dSYM into a the targets temp dir. 70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 72 | 73 | local basename 74 | basename="$(basename -s .framework.dSYM "$source")" 75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 76 | 77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 79 | strip_invalid_archs "$binary" 80 | fi 81 | 82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 83 | # Move the stripped file into its final destination. 84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 86 | else 87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 89 | fi 90 | fi 91 | } 92 | 93 | # Signs a framework with the provided identity 94 | code_sign_if_enabled() { 95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 96 | # Use the current code_sign_identitiy 97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 99 | 100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 101 | code_sign_cmd="$code_sign_cmd &" 102 | fi 103 | echo "$code_sign_cmd" 104 | eval "$code_sign_cmd" 105 | fi 106 | } 107 | 108 | # Strip invalid architectures 109 | strip_invalid_archs() { 110 | binary="$1" 111 | # Get architectures for current target binary 112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 113 | # Intersect them with the architectures we are building for 114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 115 | # If there are no archs supported by this binary then warn the user 116 | if [[ -z "$intersected_archs" ]]; then 117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 118 | STRIP_BINARY_RETVAL=0 119 | return 120 | fi 121 | stripped="" 122 | for arch in $binary_archs; do 123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 124 | # Strip non-valid architectures in-place 125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 126 | stripped="$stripped $arch" 127 | fi 128 | done 129 | if [[ "$stripped" ]]; then 130 | echo "Stripped $binary of architectures:$stripped" 131 | fi 132 | STRIP_BINARY_RETVAL=1 133 | } 134 | 135 | 136 | if [[ "$CONFIGURATION" == "Debug" ]]; then 137 | install_framework "${BUILT_PRODUCTS_DIR}/TopicEventBus/TopicEventBus.framework" 138 | fi 139 | if [[ "$CONFIGURATION" == "Release" ]]; then 140 | install_framework "${BUILT_PRODUCTS_DIR}/TopicEventBus/TopicEventBus.framework" 141 | fi 142 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 143 | wait 144 | fi 145 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ExampleProjectTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ExampleProjectTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus/TopicEventBus.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "TopicEventBus" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ExampleProjectTests { 2 | umbrella header "Pods-ExampleProjectTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectTests/Pods-ExampleProjectTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus/TopicEventBus.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "TopicEventBus" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ExampleProjectUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ExampleProjectUITests 5 | @end 6 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # Used as a return value for each invocation of `strip_invalid_archs` function. 10 | STRIP_BINARY_RETVAL=0 11 | 12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 15 | 16 | # Copies and strips a vendored framework 17 | install_framework() 18 | { 19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 20 | local source="${BUILT_PRODUCTS_DIR}/$1" 21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 23 | elif [ -r "$1" ]; then 24 | local source="$1" 25 | fi 26 | 27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 28 | 29 | if [ -L "${source}" ]; then 30 | echo "Symlinked..." 31 | source="$(readlink "${source}")" 32 | fi 33 | 34 | # Use filter instead of exclude so missing patterns don't throw errors. 35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 37 | 38 | local basename 39 | basename="$(basename -s .framework "$1")" 40 | binary="${destination}/${basename}.framework/${basename}" 41 | if ! [ -r "$binary" ]; then 42 | binary="${destination}/${basename}" 43 | fi 44 | 45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 47 | strip_invalid_archs "$binary" 48 | fi 49 | 50 | # Resign the code if required by the build settings to avoid unstable apps 51 | code_sign_if_enabled "${destination}/$(basename "$1")" 52 | 53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 55 | local swift_runtime_libs 56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 57 | for lib in $swift_runtime_libs; do 58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 60 | code_sign_if_enabled "${destination}/${lib}" 61 | done 62 | fi 63 | } 64 | 65 | # Copies and strips a vendored dSYM 66 | install_dsym() { 67 | local source="$1" 68 | if [ -r "$source" ]; then 69 | # Copy the dSYM into a the targets temp dir. 70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 72 | 73 | local basename 74 | basename="$(basename -s .framework.dSYM "$source")" 75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 76 | 77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 79 | strip_invalid_archs "$binary" 80 | fi 81 | 82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 83 | # Move the stripped file into its final destination. 84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 86 | else 87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 89 | fi 90 | fi 91 | } 92 | 93 | # Signs a framework with the provided identity 94 | code_sign_if_enabled() { 95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 96 | # Use the current code_sign_identitiy 97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 99 | 100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 101 | code_sign_cmd="$code_sign_cmd &" 102 | fi 103 | echo "$code_sign_cmd" 104 | eval "$code_sign_cmd" 105 | fi 106 | } 107 | 108 | # Strip invalid architectures 109 | strip_invalid_archs() { 110 | binary="$1" 111 | # Get architectures for current target binary 112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 113 | # Intersect them with the architectures we are building for 114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 115 | # If there are no archs supported by this binary then warn the user 116 | if [[ -z "$intersected_archs" ]]; then 117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 118 | STRIP_BINARY_RETVAL=0 119 | return 120 | fi 121 | stripped="" 122 | for arch in $binary_archs; do 123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 124 | # Strip non-valid architectures in-place 125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 126 | stripped="$stripped $arch" 127 | fi 128 | done 129 | if [[ "$stripped" ]]; then 130 | echo "Stripped $binary of architectures:$stripped" 131 | fi 132 | STRIP_BINARY_RETVAL=1 133 | } 134 | 135 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 136 | wait 137 | fi 138 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ExampleProjectUITestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ExampleProjectUITestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus/TopicEventBus.framework/Headers" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ExampleProjectUITests { 2 | umbrella header "Pods-ExampleProjectUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/Pods-ExampleProjectUITests/Pods-ExampleProjectUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus/TopicEventBus.framework/Headers" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/TopicEventBus/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/TopicEventBus/TopicEventBus-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_TopicEventBus : NSObject 3 | @end 4 | @implementation PodsDummy_TopicEventBus 5 | @end 6 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/TopicEventBus/TopicEventBus-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/TopicEventBus/TopicEventBus-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double TopicEventBusVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char TopicEventBusVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/TopicEventBus/TopicEventBus.modulemap: -------------------------------------------------------------------------------- 1 | framework module TopicEventBus { 2 | umbrella header "TopicEventBus-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ExampleProject/Pods/Target Support Files/TopicEventBus/TopicEventBus.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TopicEventBus 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Matan Cohen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TopicEventBus 2 | Publish–subscribe design pattern implementation framework, with ability to publish events by topic. 3 | (NotificationCenter extended alternative) 4 | 5 | On Medium: https://medium.com/@matancohen_22770/why-you-should-stop-using-notificationcenter-and-start-using-topiceventbus-c4c7ab312643 6 | 7 | [![Language](https://img.shields.io/badge/language-swift-orange.svg?style=flat)](https://developer.apple.com/swift) 8 | 9 |

TopicEventBus Icon

10 | 11 | ## About: 12 | 13 | TopicEventBus is Easy to use, type safe way of implementing Publish–subscribe design pattern. 14 | 15 | There are many other libraries out there, aiming to solve this issue, but none of them support publishing events by topic, in a type-safe way, with no magic strings. 16 | 17 | Also, TopicEventBus holds weak referenced for Its observers, so you don't have to be afraid of memory leaks. 18 | 19 | ## What is a topic? 20 | 21 | The topic is for example, when you would like to publish "ConversationUpdateEvent" yet have the ability to publish that event only to listeners with conversation id "1234" or to all listeners. 22 | 23 | Specifying the conversation Id is specifying a topic for that event. 24 | 25 | ## Show me the code! and what's in it for me. 26 | 27 | Let's build a chat app! 28 | 29 | In this app, we are going to have multiple conversations screens, each one of them would like to know only about changes to Its conversation. 30 | 31 | The first step, create an event for conversation update: 32 | 33 | ```Swift 34 | class ConversationChangedEvent: TopicEvent { 35 | let newTitle: String 36 | init(conversationId: String, newTitle: String) { 37 | self.newTitle = newTitle 38 | super.init() 39 | self.key = conversationId 40 | } 41 | } 42 | ``` 43 | 44 | Every event must inherit from "TopicEvent," and in case it has a topic (Our example it will be the conversation id) set "key" property to the correct value. 45 | 46 | Now inside ConversationVC, subscribe to this event: 47 | 48 | *Notice you only need to specify the return value you are expecting, for TopicEventBus to figure out the event you are subscribing for* 49 | 50 | ```Swift 51 | class ConversationVC: UIViewController { 52 | let topicEventBus: TopicEventBus 53 | let conversationId = "1234" 54 | 55 | init(topicEventBus: TopicEventBus) { 56 | self.topicEventBus = topicEventBus 57 | } 58 | 59 | override func viewDidLoad() { 60 | super.viewDidLoad() 61 | _ = self.topicEventBus.subscribe(topic: conversationId, callback: { (conversationChangedEvent: ConversationChangedEvent) in 62 | // This will run every time "ConversationChangedEvent" with id 1234 will be fired. 63 | }) 64 | } 65 | } 66 | ``` 67 | 68 | This is how you fire an event: 69 | 70 | ```Swift 71 | 72 | class FiringService { 73 | let topicEventBus: TopicEventBus 74 | init(topicEventBus: TopicEventBus) { 75 | self.topicEventBus = topicEventBus 76 | } 77 | 78 | func conversationTitleChanged() { 79 | self.topicEventBus.fire(event: ConversationChangedEvent.init(conversationId: "1234", 80 | newTitle: "First update")) 81 | } 82 | } 83 | ``` 84 | 85 | You did it! You fired your first event with topic 🤗 🎉 86 | 87 | ## API 88 | 89 | If you subscribe to event and specify no topic, you will receive all events from that type, no matter their key: 90 | 91 | ```Swift 92 | _ = self.topicEventBus.subscribe { (conversationChangedEvent: ConversationChangedEvent) in 93 | // All events from this type: ConversationChangedEvent will trigger this block 94 | } 95 | ``` 96 | 97 | Unsubscribe by calling "stop" on the returned object after subscribing: 98 | 99 | ```Swift 100 | let listener = self.topicEventBus.subscribe(topic: conversationId, callback: { (conversationChangedEvent: ConversationChangedEvent) in 101 | // 102 | }) 103 | listener.stop() 104 | ``` 105 | 106 | On app log out, terminate TopicEventBus by just calling: 107 | 108 | ```Swift 109 | self.topicEventBus.terminate() 110 | ``` 111 | 112 | 113 | ## Example project 114 | 115 | Please notice example project contains tests to support all edge cases, plus example code from the above snippets. 116 | 117 | ## Installation 118 | 119 | #### Cocoapods 120 | **TopicEventBus** is available through [CocoaPods](http://cocoapods.org). To install 121 | it, simply add the following line to your Podfile: 122 | 123 | ```ruby 124 | pod 'TopicEventBus' 125 | ``` 126 | 127 | #### Manually 128 | 1. Download and drop ```/TopicEventBus``` folder in your project. 129 | 2. Congratulations! 130 | 131 | ## Author 132 | 133 | [Matan](https://github.com/mcmatan) made this with ❤️. 134 | -------------------------------------------------------------------------------- /Tests/TopicEventBusTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TopicEventBusTests.swift 3 | // TopicEventBusTests 4 | // 5 | // Created by Matan Cohen on 8/2/18. 6 | // Copyright © 2018 Matan. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import TopicEventBus 11 | 12 | class SampleEvent: TopicEvent { 13 | var value: String 14 | init(value: String) { 15 | self.value = value 16 | } 17 | } 18 | 19 | class SampleEventWithTopic: TopicEvent { 20 | init(topic: String) { 21 | super.init() 22 | self.key = topic 23 | } 24 | } 25 | 26 | class FiringViewController: UIViewController { 27 | let topicEventBus: TopicEventBus 28 | 29 | init(topicEventBus: TopicEventBus) { 30 | self.topicEventBus = topicEventBus 31 | super.init(nibName: nil, bundle: nil) 32 | _ = self.topicEventBus.subscribe { (sampleEventWithTopic: SampleEventWithTopic) in 33 | // 34 | } 35 | } 36 | 37 | required init?(coder aDecoder: NSCoder) { 38 | fatalError("init(coder:) has not been implemented") 39 | } 40 | 41 | deinit { 42 | print("I'm dead") 43 | } 44 | } 45 | 46 | class TopicEventBusTests: XCTestCase { 47 | let topicEventBus = TopicEventBus() 48 | 49 | override func setUp() { 50 | super.setUp() 51 | // Put setup code here. This method is called before the invocation of each test method in the class. 52 | } 53 | 54 | override func tearDown() { 55 | // Put teardown code here. This method is called after the invocation of each test method in the class. 56 | super.tearDown() 57 | } 58 | 59 | func testEventNoTopic() { 60 | let completedExpectation = expectation(description: "Completed") 61 | let sampleEvent = SampleEvent(value: "bla") 62 | 63 | _ = topicEventBus.subscribe { (sampleEvent: SampleEvent) in 64 | assert(sampleEvent.value == "bla") 65 | completedExpectation.fulfill() 66 | } 67 | topicEventBus.fire(event: sampleEvent) 68 | waitForExpectations(timeout: 6, handler: nil) 69 | } 70 | 71 | func testTopic() { 72 | let completedExpectation = expectation(description: "Completed") 73 | let sampleEvent = SampleEventWithTopic.init(topic: "1234") 74 | 75 | _ = topicEventBus.subscribe(topic: "1234") { (sampleEventWithTopic: SampleEventWithTopic) in 76 | assert(true) 77 | completedExpectation.fulfill() 78 | } 79 | 80 | topicEventBus.fire(event: sampleEvent) 81 | waitForExpectations(timeout: 6, handler: nil) 82 | } 83 | weak var vc: FiringViewController? 84 | func testDeinitOnSubscribers() { 85 | let completedExpectation = expectation(description: "Completed") 86 | vc = FiringViewController.init(topicEventBus: self.topicEventBus) 87 | DispatchQueue.main.async { 88 | DispatchQueue.main.async { 89 | XCTAssertNil(self.vc) 90 | completedExpectation.fulfill() 91 | } 92 | } 93 | waitForExpectations(timeout: 4, handler: nil) 94 | } 95 | 96 | func testStopEventsAfterStopListener() { 97 | let completedExpectation = expectation(description: "Completed") 98 | let sampleEvent = SampleEventWithTopic.init(topic: "1234") 99 | 100 | let listener = topicEventBus.subscribe(topic: "1234") { (sampleEventWithTopic: SampleEventWithTopic) in 101 | assert(false) 102 | completedExpectation.fulfill() 103 | } 104 | 105 | listener.stop() 106 | topicEventBus.fire(event: sampleEvent) 107 | 108 | DispatchQueue.main.async { 109 | assert(true) 110 | completedExpectation.fulfill() 111 | } 112 | 113 | waitForExpectations(timeout: 6, handler: nil) 114 | } 115 | 116 | func testNoEventsAfterTermination() { 117 | let completedExpectation = expectation(description: "Completed") 118 | let sampleEvent = SampleEventWithTopic.init(topic: "1234") 119 | 120 | _ = topicEventBus.subscribe(topic: "1234") { (sampleEventWithTopic: SampleEventWithTopic) in 121 | assert(false) 122 | completedExpectation.fulfill() 123 | } 124 | 125 | topicEventBus.terminate() 126 | topicEventBus.fire(event: sampleEvent) 127 | 128 | DispatchQueue.main.async { 129 | assert(true) 130 | completedExpectation.fulfill() 131 | } 132 | 133 | waitForExpectations(timeout: 6, handler: nil) 134 | } 135 | 136 | } 137 | -------------------------------------------------------------------------------- /TopicEventBus.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | 4 | s.name = 'TopicEventBus' 5 | s.version = '0.0.2' 6 | s.summary = 'TopicEventBus' 7 | s.homepage = 'https://github.com/mcmatan/TopicEventBus' 8 | s.ios.deployment_target = '8.0' 9 | s.platform = :ios, '8.0' 10 | s.license = { 11 | :type => 'MIT', 12 | :file => 'LICENSE' 13 | } 14 | s.author = { 15 | 'YOURNAME' => 'Matan' 16 | } 17 | s.source = { 18 | :git => 'https://github.com/mcmatan/TopicEventBus.git', 19 | :tag => "#{s.version}" } 20 | 21 | s.framework = "UIKit" 22 | s.source_files = 'TopicEventBus*' , 'Classes/*', 'Resource/*' 23 | s.requires_arc = true 24 | 25 | end 26 | --------------------------------------------------------------------------------