├── BonjourIOS ├── BonjourIOS.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ ├── Boobalan.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ │ └── mboobalan.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ ├── Boobalan.xcuserdatad │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ │ ├── BonjourIOS.xcscheme │ │ │ └── xcschememanagement.plist │ │ └── mboobalan.xcuserdatad │ │ └── xcschemes │ │ ├── BonjourIOS.xcscheme │ │ └── xcschememanagement.plist ├── BonjourIOS │ ├── Base.lproj │ │ └── Main.storyboard │ ├── BonjourIOS-Info.plist │ ├── BonjourIOS-Prefix.pch │ ├── CAppDelegate.h │ ├── CAppDelegate.m │ ├── CHostControllerViewController.h │ ├── CHostControllerViewController.m │ ├── GCDAsyncSocket.h │ ├── GCDAsyncSocket.m │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage │ │ │ └── Contents.json │ ├── en.lproj │ │ └── InfoPlist.strings │ └── main.m └── BonjourIOSTests │ ├── BonjourIOSTests-Info.plist │ ├── BonjourIOSTests.m │ └── en.lproj │ └── InfoPlist.strings ├── BonjourMac ├── BonjourMac.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ ├── Boobalan.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ │ └── mboobalan.xcuserdatad │ │ │ ├── UserInterfaceState.xcuserstate │ │ │ └── WorkspaceSettings.xcsettings │ └── xcuserdata │ │ ├── Boobalan.xcuserdatad │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ │ ├── BonjourMac.xcscheme │ │ │ └── xcschememanagement.plist │ │ └── mboobalan.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ ├── BonjourMac.xcscheme │ │ └── xcschememanagement.plist ├── BonjourMac │ ├── Base.lproj │ │ └── MainMenu.xib │ ├── BonjourMac-Info.plist │ ├── BonjourMac-Prefix.pch │ ├── CAppDelegate.h │ ├── CAppDelegate.m │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── en.lproj │ │ ├── Credits.rtf │ │ └── InfoPlist.strings │ └── main.m ├── BonjourMacTests │ ├── BonjourMacTests-Info.plist │ ├── BonjourMacTests.m │ └── en.lproj │ │ └── InfoPlist.strings ├── CHomeViewController.h ├── CHomeViewController.m ├── CHomeViewController.xib ├── GCDAsyncSocket.h └── GCDAsyncSocket.m └── README.md /BonjourIOS/BonjourIOS.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | CC2D33EE1919013D009E58DA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D33ED1919013D009E58DA /* Foundation.framework */; }; 11 | CC2D33F01919013D009E58DA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D33EF1919013D009E58DA /* CoreGraphics.framework */; }; 12 | CC2D33F21919013D009E58DA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D33F11919013D009E58DA /* UIKit.framework */; }; 13 | CC2D33F81919013D009E58DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CC2D33F61919013D009E58DA /* InfoPlist.strings */; }; 14 | CC2D33FA1919013D009E58DA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2D33F91919013D009E58DA /* main.m */; }; 15 | CC2D33FE1919013D009E58DA /* CAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2D33FD1919013D009E58DA /* CAppDelegate.m */; }; 16 | CC2D34011919013D009E58DA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CC2D33FF1919013D009E58DA /* Main.storyboard */; }; 17 | CC2D34061919013D009E58DA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CC2D34051919013D009E58DA /* Images.xcassets */; }; 18 | CC2D340D1919013D009E58DA /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D340C1919013D009E58DA /* XCTest.framework */; }; 19 | CC2D340E1919013E009E58DA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D33ED1919013D009E58DA /* Foundation.framework */; }; 20 | CC2D340F1919013E009E58DA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D33F11919013D009E58DA /* UIKit.framework */; }; 21 | CC2D34171919013E009E58DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CC2D34151919013E009E58DA /* InfoPlist.strings */; }; 22 | CC2D34191919013E009E58DA /* BonjourIOSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2D34181919013E009E58DA /* BonjourIOSTests.m */; }; 23 | CC2D342819190198009E58DA /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2D342619190198009E58DA /* GCDAsyncSocket.m */; }; 24 | CC2D342B191901A6009E58DA /* CHostControllerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2D342A191901A6009E58DA /* CHostControllerViewController.m */; }; 25 | CC2D342D191901F1009E58DA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D342C191901F1009E58DA /* Security.framework */; }; 26 | CC2D342F191901F8009E58DA /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2D342E191901F8009E58DA /* CFNetwork.framework */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXContainerItemProxy section */ 30 | CC2D34101919013E009E58DA /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = CC2D33E21919013D009E58DA /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = CC2D33E91919013D009E58DA; 35 | remoteInfo = BonjourIOS; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | CC2D33EA1919013D009E58DA /* BonjourIOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BonjourIOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | CC2D33ED1919013D009E58DA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 42 | CC2D33EF1919013D009E58DA /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 43 | CC2D33F11919013D009E58DA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 44 | CC2D33F51919013D009E58DA /* BonjourIOS-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BonjourIOS-Info.plist"; sourceTree = ""; }; 45 | CC2D33F71919013D009E58DA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 46 | CC2D33F91919013D009E58DA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | CC2D33FB1919013D009E58DA /* BonjourIOS-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BonjourIOS-Prefix.pch"; sourceTree = ""; }; 48 | CC2D33FC1919013D009E58DA /* CAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAppDelegate.h; sourceTree = ""; }; 49 | CC2D33FD1919013D009E58DA /* CAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CAppDelegate.m; sourceTree = ""; }; 50 | CC2D34001919013D009E58DA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 51 | CC2D34051919013D009E58DA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 52 | CC2D340B1919013D009E58DA /* BonjourIOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BonjourIOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | CC2D340C1919013D009E58DA /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 54 | CC2D34141919013E009E58DA /* BonjourIOSTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BonjourIOSTests-Info.plist"; sourceTree = ""; }; 55 | CC2D34161919013E009E58DA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 56 | CC2D34181919013E009E58DA /* BonjourIOSTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BonjourIOSTests.m; sourceTree = ""; }; 57 | CC2D342619190198009E58DA /* GCDAsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncSocket.m; sourceTree = ""; }; 58 | CC2D342719190198009E58DA /* GCDAsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncSocket.h; sourceTree = ""; }; 59 | CC2D3429191901A6009E58DA /* CHostControllerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHostControllerViewController.h; sourceTree = ""; }; 60 | CC2D342A191901A6009E58DA /* CHostControllerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CHostControllerViewController.m; sourceTree = ""; }; 61 | CC2D342C191901F1009E58DA /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 62 | CC2D342E191901F8009E58DA /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 63 | /* End PBXFileReference section */ 64 | 65 | /* Begin PBXFrameworksBuildPhase section */ 66 | CC2D33E71919013D009E58DA /* Frameworks */ = { 67 | isa = PBXFrameworksBuildPhase; 68 | buildActionMask = 2147483647; 69 | files = ( 70 | CC2D342F191901F8009E58DA /* CFNetwork.framework in Frameworks */, 71 | CC2D342D191901F1009E58DA /* Security.framework in Frameworks */, 72 | CC2D33F01919013D009E58DA /* CoreGraphics.framework in Frameworks */, 73 | CC2D33F21919013D009E58DA /* UIKit.framework in Frameworks */, 74 | CC2D33EE1919013D009E58DA /* Foundation.framework in Frameworks */, 75 | ); 76 | runOnlyForDeploymentPostprocessing = 0; 77 | }; 78 | CC2D34081919013D009E58DA /* Frameworks */ = { 79 | isa = PBXFrameworksBuildPhase; 80 | buildActionMask = 2147483647; 81 | files = ( 82 | CC2D340D1919013D009E58DA /* XCTest.framework in Frameworks */, 83 | CC2D340F1919013E009E58DA /* UIKit.framework in Frameworks */, 84 | CC2D340E1919013E009E58DA /* Foundation.framework in Frameworks */, 85 | ); 86 | runOnlyForDeploymentPostprocessing = 0; 87 | }; 88 | /* End PBXFrameworksBuildPhase section */ 89 | 90 | /* Begin PBXGroup section */ 91 | CC2D33E11919013D009E58DA = { 92 | isa = PBXGroup; 93 | children = ( 94 | CC2D33F31919013D009E58DA /* BonjourIOS */, 95 | CC2D34121919013E009E58DA /* BonjourIOSTests */, 96 | CC2D33EC1919013D009E58DA /* Frameworks */, 97 | CC2D33EB1919013D009E58DA /* Products */, 98 | ); 99 | sourceTree = ""; 100 | }; 101 | CC2D33EB1919013D009E58DA /* Products */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | CC2D33EA1919013D009E58DA /* BonjourIOS.app */, 105 | CC2D340B1919013D009E58DA /* BonjourIOSTests.xctest */, 106 | ); 107 | name = Products; 108 | sourceTree = ""; 109 | }; 110 | CC2D33EC1919013D009E58DA /* Frameworks */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | CC2D342E191901F8009E58DA /* CFNetwork.framework */, 114 | CC2D342C191901F1009E58DA /* Security.framework */, 115 | CC2D33ED1919013D009E58DA /* Foundation.framework */, 116 | CC2D33EF1919013D009E58DA /* CoreGraphics.framework */, 117 | CC2D33F11919013D009E58DA /* UIKit.framework */, 118 | CC2D340C1919013D009E58DA /* XCTest.framework */, 119 | ); 120 | name = Frameworks; 121 | sourceTree = ""; 122 | }; 123 | CC2D33F31919013D009E58DA /* BonjourIOS */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | CC2D3429191901A6009E58DA /* CHostControllerViewController.h */, 127 | CC2D342A191901A6009E58DA /* CHostControllerViewController.m */, 128 | CC2D342519190190009E58DA /* ThridParty */, 129 | CC2D33FC1919013D009E58DA /* CAppDelegate.h */, 130 | CC2D33FD1919013D009E58DA /* CAppDelegate.m */, 131 | CC2D33FF1919013D009E58DA /* Main.storyboard */, 132 | CC2D34051919013D009E58DA /* Images.xcassets */, 133 | CC2D33F41919013D009E58DA /* Supporting Files */, 134 | ); 135 | path = BonjourIOS; 136 | sourceTree = ""; 137 | }; 138 | CC2D33F41919013D009E58DA /* Supporting Files */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | CC2D33F51919013D009E58DA /* BonjourIOS-Info.plist */, 142 | CC2D33F61919013D009E58DA /* InfoPlist.strings */, 143 | CC2D33F91919013D009E58DA /* main.m */, 144 | CC2D33FB1919013D009E58DA /* BonjourIOS-Prefix.pch */, 145 | ); 146 | name = "Supporting Files"; 147 | sourceTree = ""; 148 | }; 149 | CC2D34121919013E009E58DA /* BonjourIOSTests */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | CC2D34181919013E009E58DA /* BonjourIOSTests.m */, 153 | CC2D34131919013E009E58DA /* Supporting Files */, 154 | ); 155 | path = BonjourIOSTests; 156 | sourceTree = ""; 157 | }; 158 | CC2D34131919013E009E58DA /* Supporting Files */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | CC2D34141919013E009E58DA /* BonjourIOSTests-Info.plist */, 162 | CC2D34151919013E009E58DA /* InfoPlist.strings */, 163 | ); 164 | name = "Supporting Files"; 165 | sourceTree = ""; 166 | }; 167 | CC2D342519190190009E58DA /* ThridParty */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | CC2D342619190198009E58DA /* GCDAsyncSocket.m */, 171 | CC2D342719190198009E58DA /* GCDAsyncSocket.h */, 172 | ); 173 | name = ThridParty; 174 | sourceTree = ""; 175 | }; 176 | /* End PBXGroup section */ 177 | 178 | /* Begin PBXNativeTarget section */ 179 | CC2D33E91919013D009E58DA /* BonjourIOS */ = { 180 | isa = PBXNativeTarget; 181 | buildConfigurationList = CC2D341C1919013E009E58DA /* Build configuration list for PBXNativeTarget "BonjourIOS" */; 182 | buildPhases = ( 183 | CC2D33E61919013D009E58DA /* Sources */, 184 | CC2D33E71919013D009E58DA /* Frameworks */, 185 | CC2D33E81919013D009E58DA /* Resources */, 186 | ); 187 | buildRules = ( 188 | ); 189 | dependencies = ( 190 | ); 191 | name = BonjourIOS; 192 | productName = BonjourIOS; 193 | productReference = CC2D33EA1919013D009E58DA /* BonjourIOS.app */; 194 | productType = "com.apple.product-type.application"; 195 | }; 196 | CC2D340A1919013D009E58DA /* BonjourIOSTests */ = { 197 | isa = PBXNativeTarget; 198 | buildConfigurationList = CC2D341F1919013E009E58DA /* Build configuration list for PBXNativeTarget "BonjourIOSTests" */; 199 | buildPhases = ( 200 | CC2D34071919013D009E58DA /* Sources */, 201 | CC2D34081919013D009E58DA /* Frameworks */, 202 | CC2D34091919013D009E58DA /* Resources */, 203 | ); 204 | buildRules = ( 205 | ); 206 | dependencies = ( 207 | CC2D34111919013E009E58DA /* PBXTargetDependency */, 208 | ); 209 | name = BonjourIOSTests; 210 | productName = BonjourIOSTests; 211 | productReference = CC2D340B1919013D009E58DA /* BonjourIOSTests.xctest */; 212 | productType = "com.apple.product-type.bundle.unit-test"; 213 | }; 214 | /* End PBXNativeTarget section */ 215 | 216 | /* Begin PBXProject section */ 217 | CC2D33E21919013D009E58DA /* Project object */ = { 218 | isa = PBXProject; 219 | attributes = { 220 | CLASSPREFIX = C; 221 | LastUpgradeCheck = 0510; 222 | ORGANIZATIONNAME = greateindialcub; 223 | TargetAttributes = { 224 | CC2D340A1919013D009E58DA = { 225 | TestTargetID = CC2D33E91919013D009E58DA; 226 | }; 227 | }; 228 | }; 229 | buildConfigurationList = CC2D33E51919013D009E58DA /* Build configuration list for PBXProject "BonjourIOS" */; 230 | compatibilityVersion = "Xcode 3.2"; 231 | developmentRegion = English; 232 | hasScannedForEncodings = 0; 233 | knownRegions = ( 234 | en, 235 | Base, 236 | ); 237 | mainGroup = CC2D33E11919013D009E58DA; 238 | productRefGroup = CC2D33EB1919013D009E58DA /* Products */; 239 | projectDirPath = ""; 240 | projectRoot = ""; 241 | targets = ( 242 | CC2D33E91919013D009E58DA /* BonjourIOS */, 243 | CC2D340A1919013D009E58DA /* BonjourIOSTests */, 244 | ); 245 | }; 246 | /* End PBXProject section */ 247 | 248 | /* Begin PBXResourcesBuildPhase section */ 249 | CC2D33E81919013D009E58DA /* Resources */ = { 250 | isa = PBXResourcesBuildPhase; 251 | buildActionMask = 2147483647; 252 | files = ( 253 | CC2D34061919013D009E58DA /* Images.xcassets in Resources */, 254 | CC2D33F81919013D009E58DA /* InfoPlist.strings in Resources */, 255 | CC2D34011919013D009E58DA /* Main.storyboard in Resources */, 256 | ); 257 | runOnlyForDeploymentPostprocessing = 0; 258 | }; 259 | CC2D34091919013D009E58DA /* Resources */ = { 260 | isa = PBXResourcesBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | CC2D34171919013E009E58DA /* InfoPlist.strings in Resources */, 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | /* End PBXResourcesBuildPhase section */ 268 | 269 | /* Begin PBXSourcesBuildPhase section */ 270 | CC2D33E61919013D009E58DA /* Sources */ = { 271 | isa = PBXSourcesBuildPhase; 272 | buildActionMask = 2147483647; 273 | files = ( 274 | CC2D342819190198009E58DA /* GCDAsyncSocket.m in Sources */, 275 | CC2D33FE1919013D009E58DA /* CAppDelegate.m in Sources */, 276 | CC2D342B191901A6009E58DA /* CHostControllerViewController.m in Sources */, 277 | CC2D33FA1919013D009E58DA /* main.m in Sources */, 278 | ); 279 | runOnlyForDeploymentPostprocessing = 0; 280 | }; 281 | CC2D34071919013D009E58DA /* Sources */ = { 282 | isa = PBXSourcesBuildPhase; 283 | buildActionMask = 2147483647; 284 | files = ( 285 | CC2D34191919013E009E58DA /* BonjourIOSTests.m in Sources */, 286 | ); 287 | runOnlyForDeploymentPostprocessing = 0; 288 | }; 289 | /* End PBXSourcesBuildPhase section */ 290 | 291 | /* Begin PBXTargetDependency section */ 292 | CC2D34111919013E009E58DA /* PBXTargetDependency */ = { 293 | isa = PBXTargetDependency; 294 | target = CC2D33E91919013D009E58DA /* BonjourIOS */; 295 | targetProxy = CC2D34101919013E009E58DA /* PBXContainerItemProxy */; 296 | }; 297 | /* End PBXTargetDependency section */ 298 | 299 | /* Begin PBXVariantGroup section */ 300 | CC2D33F61919013D009E58DA /* InfoPlist.strings */ = { 301 | isa = PBXVariantGroup; 302 | children = ( 303 | CC2D33F71919013D009E58DA /* en */, 304 | ); 305 | name = InfoPlist.strings; 306 | sourceTree = ""; 307 | }; 308 | CC2D33FF1919013D009E58DA /* Main.storyboard */ = { 309 | isa = PBXVariantGroup; 310 | children = ( 311 | CC2D34001919013D009E58DA /* Base */, 312 | ); 313 | name = Main.storyboard; 314 | sourceTree = ""; 315 | }; 316 | CC2D34151919013E009E58DA /* InfoPlist.strings */ = { 317 | isa = PBXVariantGroup; 318 | children = ( 319 | CC2D34161919013E009E58DA /* en */, 320 | ); 321 | name = InfoPlist.strings; 322 | sourceTree = ""; 323 | }; 324 | /* End PBXVariantGroup section */ 325 | 326 | /* Begin XCBuildConfiguration section */ 327 | CC2D341A1919013E009E58DA /* Debug */ = { 328 | isa = XCBuildConfiguration; 329 | buildSettings = { 330 | ALWAYS_SEARCH_USER_PATHS = NO; 331 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 332 | CLANG_CXX_LIBRARY = "libc++"; 333 | CLANG_ENABLE_MODULES = YES; 334 | CLANG_ENABLE_OBJC_ARC = YES; 335 | CLANG_WARN_BOOL_CONVERSION = YES; 336 | CLANG_WARN_CONSTANT_CONVERSION = YES; 337 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 338 | CLANG_WARN_EMPTY_BODY = YES; 339 | CLANG_WARN_ENUM_CONVERSION = YES; 340 | CLANG_WARN_INT_CONVERSION = YES; 341 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 342 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 343 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 344 | COPY_PHASE_STRIP = NO; 345 | GCC_C_LANGUAGE_STANDARD = gnu99; 346 | GCC_DYNAMIC_NO_PIC = NO; 347 | GCC_OPTIMIZATION_LEVEL = 0; 348 | GCC_PREPROCESSOR_DEFINITIONS = ( 349 | "DEBUG=1", 350 | "$(inherited)", 351 | ); 352 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 353 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 354 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 355 | GCC_WARN_UNDECLARED_SELECTOR = YES; 356 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 357 | GCC_WARN_UNUSED_FUNCTION = YES; 358 | GCC_WARN_UNUSED_VARIABLE = YES; 359 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 360 | ONLY_ACTIVE_ARCH = YES; 361 | SDKROOT = iphoneos; 362 | }; 363 | name = Debug; 364 | }; 365 | CC2D341B1919013E009E58DA /* Release */ = { 366 | isa = XCBuildConfiguration; 367 | buildSettings = { 368 | ALWAYS_SEARCH_USER_PATHS = NO; 369 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 370 | CLANG_CXX_LIBRARY = "libc++"; 371 | CLANG_ENABLE_MODULES = YES; 372 | CLANG_ENABLE_OBJC_ARC = YES; 373 | CLANG_WARN_BOOL_CONVERSION = YES; 374 | CLANG_WARN_CONSTANT_CONVERSION = YES; 375 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 376 | CLANG_WARN_EMPTY_BODY = YES; 377 | CLANG_WARN_ENUM_CONVERSION = YES; 378 | CLANG_WARN_INT_CONVERSION = YES; 379 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 380 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 381 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 382 | COPY_PHASE_STRIP = YES; 383 | ENABLE_NS_ASSERTIONS = NO; 384 | GCC_C_LANGUAGE_STANDARD = gnu99; 385 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 386 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 387 | GCC_WARN_UNDECLARED_SELECTOR = YES; 388 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 389 | GCC_WARN_UNUSED_FUNCTION = YES; 390 | GCC_WARN_UNUSED_VARIABLE = YES; 391 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 392 | SDKROOT = iphoneos; 393 | VALIDATE_PRODUCT = YES; 394 | }; 395 | name = Release; 396 | }; 397 | CC2D341D1919013E009E58DA /* Debug */ = { 398 | isa = XCBuildConfiguration; 399 | buildSettings = { 400 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 401 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 402 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 403 | GCC_PREFIX_HEADER = "BonjourIOS/BonjourIOS-Prefix.pch"; 404 | INFOPLIST_FILE = "BonjourIOS/BonjourIOS-Info.plist"; 405 | PRODUCT_NAME = "$(TARGET_NAME)"; 406 | WRAPPER_EXTENSION = app; 407 | }; 408 | name = Debug; 409 | }; 410 | CC2D341E1919013E009E58DA /* Release */ = { 411 | isa = XCBuildConfiguration; 412 | buildSettings = { 413 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 414 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 415 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 416 | GCC_PREFIX_HEADER = "BonjourIOS/BonjourIOS-Prefix.pch"; 417 | INFOPLIST_FILE = "BonjourIOS/BonjourIOS-Info.plist"; 418 | PRODUCT_NAME = "$(TARGET_NAME)"; 419 | WRAPPER_EXTENSION = app; 420 | }; 421 | name = Release; 422 | }; 423 | CC2D34201919013E009E58DA /* Debug */ = { 424 | isa = XCBuildConfiguration; 425 | buildSettings = { 426 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BonjourIOS.app/BonjourIOS"; 427 | FRAMEWORK_SEARCH_PATHS = ( 428 | "$(SDKROOT)/Developer/Library/Frameworks", 429 | "$(inherited)", 430 | "$(DEVELOPER_FRAMEWORKS_DIR)", 431 | ); 432 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 433 | GCC_PREFIX_HEADER = "BonjourIOS/BonjourIOS-Prefix.pch"; 434 | GCC_PREPROCESSOR_DEFINITIONS = ( 435 | "DEBUG=1", 436 | "$(inherited)", 437 | ); 438 | INFOPLIST_FILE = "BonjourIOSTests/BonjourIOSTests-Info.plist"; 439 | PRODUCT_NAME = "$(TARGET_NAME)"; 440 | TEST_HOST = "$(BUNDLE_LOADER)"; 441 | WRAPPER_EXTENSION = xctest; 442 | }; 443 | name = Debug; 444 | }; 445 | CC2D34211919013E009E58DA /* Release */ = { 446 | isa = XCBuildConfiguration; 447 | buildSettings = { 448 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BonjourIOS.app/BonjourIOS"; 449 | FRAMEWORK_SEARCH_PATHS = ( 450 | "$(SDKROOT)/Developer/Library/Frameworks", 451 | "$(inherited)", 452 | "$(DEVELOPER_FRAMEWORKS_DIR)", 453 | ); 454 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 455 | GCC_PREFIX_HEADER = "BonjourIOS/BonjourIOS-Prefix.pch"; 456 | INFOPLIST_FILE = "BonjourIOSTests/BonjourIOSTests-Info.plist"; 457 | PRODUCT_NAME = "$(TARGET_NAME)"; 458 | TEST_HOST = "$(BUNDLE_LOADER)"; 459 | WRAPPER_EXTENSION = xctest; 460 | }; 461 | name = Release; 462 | }; 463 | /* End XCBuildConfiguration section */ 464 | 465 | /* Begin XCConfigurationList section */ 466 | CC2D33E51919013D009E58DA /* Build configuration list for PBXProject "BonjourIOS" */ = { 467 | isa = XCConfigurationList; 468 | buildConfigurations = ( 469 | CC2D341A1919013E009E58DA /* Debug */, 470 | CC2D341B1919013E009E58DA /* Release */, 471 | ); 472 | defaultConfigurationIsVisible = 0; 473 | defaultConfigurationName = Release; 474 | }; 475 | CC2D341C1919013E009E58DA /* Build configuration list for PBXNativeTarget "BonjourIOS" */ = { 476 | isa = XCConfigurationList; 477 | buildConfigurations = ( 478 | CC2D341D1919013E009E58DA /* Debug */, 479 | CC2D341E1919013E009E58DA /* Release */, 480 | ); 481 | defaultConfigurationIsVisible = 0; 482 | }; 483 | CC2D341F1919013E009E58DA /* Build configuration list for PBXNativeTarget "BonjourIOSTests" */ = { 484 | isa = XCConfigurationList; 485 | buildConfigurations = ( 486 | CC2D34201919013E009E58DA /* Debug */, 487 | CC2D34211919013E009E58DA /* Release */, 488 | ); 489 | defaultConfigurationIsVisible = 0; 490 | }; 491 | /* End XCConfigurationList section */ 492 | }; 493 | rootObject = CC2D33E21919013D009E58DA /* Project object */; 494 | } 495 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/project.xcworkspace/xcuserdata/Boobalan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boobalaninfo/Bonjour-iOS-MAC-Apps/bed7bb637a611675ac3928213ab4718d600f8083/BonjourIOS/BonjourIOS.xcodeproj/project.xcworkspace/xcuserdata/Boobalan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/project.xcworkspace/xcuserdata/mboobalan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boobalaninfo/Bonjour-iOS-MAC-Apps/bed7bb637a611675ac3928213ab4718d600f8083/BonjourIOS/BonjourIOS.xcodeproj/project.xcworkspace/xcuserdata/mboobalan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/xcuserdata/Boobalan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/xcuserdata/Boobalan.xcuserdatad/xcschemes/BonjourIOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/xcuserdata/Boobalan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BonjourIOS.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | CC2D33E91919013D009E58DA 16 | 17 | primary 18 | 19 | 20 | CC2D340A1919013D009E58DA 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/xcuserdata/mboobalan.xcuserdatad/xcschemes/BonjourIOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 61 | 62 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS.xcodeproj/xcuserdata/mboobalan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BonjourIOS.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | CC2D33E91919013D009E58DA 16 | 17 | primary 18 | 19 | 20 | CC2D340A1919013D009E58DA 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 27 | 35 | 47 | 54 | 63 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/BonjourIOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.greateindiaclub.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/BonjourIOS-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #import "GCDAsyncSocket.h" 17 | #endif 18 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/CAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CAppDelegate.h 3 | // BonjourIOS 4 | // 5 | // Created by Boobalan Munusamy on 5/6/14. 6 | // Copyright (c) 2014 greateindialcub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/CAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CAppDelegate.m 3 | // BonjourIOS 4 | // 5 | // Created by Boobalan Munusamy on 5/6/14. 6 | // Copyright (c) 2014 greateindialcub. All rights reserved. 7 | // 8 | 9 | #import "CAppDelegate.h" 10 | 11 | @implementation CAppDelegate 12 | 13 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 14 | { 15 | // Override point for customization after application launch. 16 | return YES; 17 | } 18 | 19 | - (void)applicationWillResignActive:(UIApplication *)application 20 | { 21 | // 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. 22 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 23 | } 24 | 25 | - (void)applicationDidEnterBackground:(UIApplication *)application 26 | { 27 | // 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. 28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 29 | } 30 | 31 | - (void)applicationWillEnterForeground:(UIApplication *)application 32 | { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | - (void)applicationDidBecomeActive:(UIApplication *)application 37 | { 38 | // 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. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application 42 | { 43 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/CHostControllerViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CHostControllerViewController.h 3 | // ProBonjour 4 | // 5 | // Created by Boobalan Munusamy on 4/30/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CHostControllerViewController : UIViewController 12 | 13 | @property (strong, nonatomic) NSNetService *service; 14 | @property (strong, nonatomic) GCDAsyncSocket *socket; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/CHostControllerViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CHostControllerViewController.m 3 | // ProBonjour 4 | // 5 | // Created by Boobalan Munusamy on 4/30/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import "CHostControllerViewController.h" 10 | 11 | #define SERVICE_NAME @"_probonjore._tcp." 12 | 13 | #define ACK_SERVICE_NAME @"_ack._tcp." 14 | 15 | @interface CHostControllerViewController (){ 16 | NSMutableData* dataBuffer; 17 | } 18 | @property (weak, nonatomic) IBOutlet UILabel *lblReceivedInfo; 19 | 20 | @property (weak, nonatomic) IBOutlet UITextField *txtInfo; 21 | @property (weak, nonatomic) IBOutlet UILabel *lblConnect; 22 | 23 | @property (weak, nonatomic) IBOutlet UIButton *btnSend; 24 | @property (weak, nonatomic) IBOutlet UILabel *lblNotSubscribe; 25 | 26 | @property(nonatomic, strong) NSMutableArray* arrServices; 27 | @property (weak, nonatomic) IBOutlet UITableView *tblview; 28 | 29 | 30 | @property(nonatomic,strong) NSNetServiceBrowser* coServiceBrowser; 31 | @property(nonatomic,strong) NSMutableDictionary* dictSockets; 32 | 33 | @property(nonatomic,assign) int selectedIndex; 34 | @end 35 | 36 | @implementation CHostControllerViewController 37 | 38 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 39 | { 40 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 41 | if (self) { 42 | // Custom initialization 43 | } 44 | return self; 45 | } 46 | - (IBAction)btnBackButton:(id)sender { 47 | [self.service stop]; 48 | self.socket=nil; 49 | self.service=nil; 50 | 51 | [self dismissViewControllerAnimated:YES completion:nil]; 52 | } 53 | 54 | - (void)viewDidLoad 55 | { 56 | [super viewDidLoad]; 57 | dataBuffer = [NSMutableData data]; 58 | // Do any additional setup after loading the view. 59 | [self startBroadCasting]; 60 | // [self startBrowsingServices]; 61 | } 62 | 63 | - (void)didReceiveMemoryWarning 64 | { 65 | [super didReceiveMemoryWarning]; 66 | // Dispose of any resources that can be recreated. 67 | } 68 | 69 | -(void)connectedWithDevice{ 70 | self.lblConnect.text=@"Connected with Device"; 71 | self.lblConnect.textColor=[UIColor greenColor]; 72 | self.txtInfo.hidden=NO; 73 | self.btnSend.hidden=NO; 74 | } 75 | 76 | -(void)disconnectedWithDevice{ 77 | self.lblConnect.text=@"No device is connected"; 78 | self.lblConnect.textColor=[UIColor redColor]; 79 | self.txtInfo.hidden=YES; 80 | self.btnSend.hidden=YES; 81 | } 82 | 83 | 84 | -(void)startBroadCasting{ 85 | self.socket=[[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 86 | NSError* error = nil; 87 | if ([self.socket acceptOnPort:0 error:&error]) { 88 | self.service =[[NSNetService alloc]initWithDomain:@"local." type:SERVICE_NAME name:@"" port:[self.socket localPort]]; 89 | self.service.delegate=self; 90 | [self.service publish]; 91 | }else { 92 | NSLog(@"Unable to create socket. Error %@ with user info %@.", error, [error userInfo]); 93 | } 94 | } 95 | 96 | - (void)netServiceDidPublish:(NSNetService *)service { 97 | NSLog(@"Bonjour Service Published: domain(%@) type(%@) name(%@) port(%i)", [service domain], [service type], [service name], (int)[service port]); 98 | } 99 | - (void)netService:(NSNetService *)service didNotPublish:(NSDictionary *)errorDict { 100 | NSLog(@"Failed to Publish Service: domain(%@) type(%@) name(%@) - %@", [service domain], [service type], [service name], errorDict); 101 | } 102 | 103 | 104 | -(void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket{ 105 | self.socket= newSocket; 106 | 107 | [self.socket readDataToLength:sizeof(uint64_t) withTimeout:-1.0f tag:0]; 108 | [self connectedWithDevice]; 109 | NSLog(@"Accepted the new socked"); 110 | } 111 | 112 | 113 | - (void)socketDidDisconnect:(GCDAsyncSocket *)socket withError:(NSError *)error { 114 | 115 | NSLog(@"%@", error.userInfo); 116 | 117 | if (self.socket == socket) { 118 | 119 | [self disconnectedWithDevice]; 120 | } 121 | 122 | 123 | } 124 | 125 | -(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{ 126 | NSLog(@"Write data is done"); 127 | } 128 | 129 | 130 | -(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 131 | 132 | NSLog(@"Trying to read the data"); 133 | 134 | [dataBuffer appendData:data]; 135 | if ([sock socketAvailableBytes]==0) { 136 | NSString* strInfo =[[NSString alloc]initWithData:dataBuffer encoding:NSUTF8StringEncoding]; 137 | self.lblReceivedInfo.text= strInfo; 138 | [dataBuffer setLength:0]; 139 | } 140 | 141 | 142 | [sock readDataWithTimeout:-1.0f tag:0]; 143 | 144 | } 145 | 146 | -(GCDAsyncSocket*)getSelectedSocket{ 147 | NSNetService* coService =[self.arrServices objectAtIndex:self.selectedIndex]; 148 | return [self.dictSockets objectForKey:coService.name]; 149 | 150 | } 151 | 152 | - (IBAction)btnSendInfo:(id)sender { 153 | NSDictionary* dictInfo = [NSDictionary dictionaryWithObjectsAndKeys:self.txtInfo.text,@"data", nil]; 154 | NSData* dataDict = [NSJSONSerialization dataWithJSONObject:dictInfo options:NSJSONWritingPrettyPrinted error:nil]; 155 | 156 | [self.socket writeData:dataDict withTimeout:-1.0f tag:0]; 157 | 158 | } 159 | 160 | /* 161 | #pragma mark - Navigation 162 | 163 | // In a storyboard-based application, you will often want to do a little preparation before navigation 164 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 165 | { 166 | // Get the new view controller using [segue destinationViewController]. 167 | // Pass the selected object to the new view controller. 168 | } 169 | */ 170 | 171 | - (BOOL)textFieldShouldReturn:(UITextField *)textField{ 172 | [textField resignFirstResponder]; 173 | return YES; 174 | } 175 | 176 | #pragma mark - tableview delegate 177 | -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 178 | return [self.arrServices count]; 179 | } 180 | 181 | -(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 182 | UITableViewCell* coTableViewCell =[tableView dequeueReusableCellWithIdentifier:@"deviceName"]; 183 | NSNetService* coBrowser = [self.arrServices objectAtIndex:indexPath.row]; 184 | coTableViewCell.textLabel.text= coBrowser.name; 185 | 186 | return coTableViewCell; 187 | } 188 | 189 | -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 190 | 191 | 192 | self.selectedIndex= indexPath.row; 193 | NSNetService* coService =[self.arrServices objectAtIndex:indexPath.row]; 194 | 195 | NSLog(@"Start connect with device %@", coService.name); 196 | coService.delegate=self; 197 | [coService resolveWithTimeout:30.0f]; 198 | } 199 | @end 200 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOS/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BonjourIOS 4 | // 5 | // Created by Boobalan Munusamy on 5/6/14. 6 | // Copyright (c) 2014 greateindialcub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "CAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([CAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOSTests/BonjourIOSTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.greateindiaclub.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOSTests/BonjourIOSTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BonjourIOSTests.m 3 | // BonjourIOSTests 4 | // 5 | // Created by Boobalan Munusamy on 5/6/14. 6 | // Copyright (c) 2014 greateindialcub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BonjourIOSTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation BonjourIOSTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /BonjourIOS/BonjourIOSTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | CC2996B61913A7150039CE21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2996B51913A7150039CE21 /* Cocoa.framework */; }; 11 | CC2996C01913A7150039CE21 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CC2996BE1913A7150039CE21 /* InfoPlist.strings */; }; 12 | CC2996C21913A7150039CE21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2996C11913A7150039CE21 /* main.m */; }; 13 | CC2996C61913A7150039CE21 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = CC2996C41913A7150039CE21 /* Credits.rtf */; }; 14 | CC2996C91913A7150039CE21 /* CAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2996C81913A7150039CE21 /* CAppDelegate.m */; }; 15 | CC2996CC1913A7150039CE21 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CC2996CA1913A7150039CE21 /* MainMenu.xib */; }; 16 | CC2996CE1913A7150039CE21 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CC2996CD1913A7150039CE21 /* Images.xcassets */; }; 17 | CC2996D51913A7150039CE21 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2996D41913A7150039CE21 /* XCTest.framework */; }; 18 | CC2996D61913A7150039CE21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC2996B51913A7150039CE21 /* Cocoa.framework */; }; 19 | CC2996DE1913A7150039CE21 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CC2996DC1913A7150039CE21 /* InfoPlist.strings */; }; 20 | CC2996E01913A7150039CE21 /* BonjourMacTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2996DF1913A7150039CE21 /* BonjourMacTests.m */; }; 21 | CC2996F31913A9D30039CE21 /* CHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2996F11913A9D20039CE21 /* CHomeViewController.m */; }; 22 | CC2996F41913A9D30039CE21 /* CHomeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CC2996F21913A9D20039CE21 /* CHomeViewController.xib */; }; 23 | CC3E051B1917616600416245 /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = CC3E051A1917616600416245 /* GCDAsyncSocket.m */; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | CC2996D71913A7150039CE21 /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = CC2996AA1913A7150039CE21 /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = CC2996B11913A7150039CE21; 32 | remoteInfo = BonjourMac; 33 | }; 34 | /* End PBXContainerItemProxy section */ 35 | 36 | /* Begin PBXFileReference section */ 37 | CC2996B21913A7150039CE21 /* BonjourMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BonjourMac.app; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | CC2996B51913A7150039CE21 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 39 | CC2996B81913A7150039CE21 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 40 | CC2996B91913A7150039CE21 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 41 | CC2996BA1913A7150039CE21 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 42 | CC2996BD1913A7150039CE21 /* BonjourMac-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BonjourMac-Info.plist"; sourceTree = ""; }; 43 | CC2996BF1913A7150039CE21 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 44 | CC2996C11913A7150039CE21 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 45 | CC2996C31913A7150039CE21 /* BonjourMac-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BonjourMac-Prefix.pch"; sourceTree = ""; }; 46 | CC2996C51913A7150039CE21 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; 47 | CC2996C71913A7150039CE21 /* CAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAppDelegate.h; sourceTree = ""; }; 48 | CC2996C81913A7150039CE21 /* CAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CAppDelegate.m; sourceTree = ""; }; 49 | CC2996CB1913A7150039CE21 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 50 | CC2996CD1913A7150039CE21 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 51 | CC2996D31913A7150039CE21 /* BonjourMacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BonjourMacTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | CC2996D41913A7150039CE21 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 53 | CC2996DB1913A7150039CE21 /* BonjourMacTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BonjourMacTests-Info.plist"; sourceTree = ""; }; 54 | CC2996DD1913A7150039CE21 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 55 | CC2996DF1913A7150039CE21 /* BonjourMacTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BonjourMacTests.m; sourceTree = ""; }; 56 | CC2996F01913A9D20039CE21 /* CHomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHomeViewController.h; sourceTree = ""; }; 57 | CC2996F11913A9D20039CE21 /* CHomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CHomeViewController.m; sourceTree = ""; }; 58 | CC2996F21913A9D20039CE21 /* CHomeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CHomeViewController.xib; sourceTree = ""; }; 59 | CC3E05191917616600416245 /* GCDAsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncSocket.h; sourceTree = ""; }; 60 | CC3E051A1917616600416245 /* GCDAsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncSocket.m; sourceTree = ""; }; 61 | /* End PBXFileReference section */ 62 | 63 | /* Begin PBXFrameworksBuildPhase section */ 64 | CC2996AF1913A7150039CE21 /* Frameworks */ = { 65 | isa = PBXFrameworksBuildPhase; 66 | buildActionMask = 2147483647; 67 | files = ( 68 | CC2996B61913A7150039CE21 /* Cocoa.framework in Frameworks */, 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | CC2996D01913A7150039CE21 /* Frameworks */ = { 73 | isa = PBXFrameworksBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | CC2996D61913A7150039CE21 /* Cocoa.framework in Frameworks */, 77 | CC2996D51913A7150039CE21 /* XCTest.framework in Frameworks */, 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | /* End PBXFrameworksBuildPhase section */ 82 | 83 | /* Begin PBXGroup section */ 84 | CC2996A91913A7150039CE21 = { 85 | isa = PBXGroup; 86 | children = ( 87 | CC2996F51913AF760039CE21 /* Util */, 88 | CC2996E91913A71F0039CE21 /* Controller */, 89 | CC2996BB1913A7150039CE21 /* BonjourMac */, 90 | CC2996D91913A7150039CE21 /* BonjourMacTests */, 91 | CC2996B41913A7150039CE21 /* Frameworks */, 92 | CC2996B31913A7150039CE21 /* Products */, 93 | ); 94 | sourceTree = ""; 95 | }; 96 | CC2996B31913A7150039CE21 /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | CC2996B21913A7150039CE21 /* BonjourMac.app */, 100 | CC2996D31913A7150039CE21 /* BonjourMacTests.xctest */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | CC2996B41913A7150039CE21 /* Frameworks */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | CC2996B51913A7150039CE21 /* Cocoa.framework */, 109 | CC2996D41913A7150039CE21 /* XCTest.framework */, 110 | CC2996B71913A7150039CE21 /* Other Frameworks */, 111 | ); 112 | name = Frameworks; 113 | sourceTree = ""; 114 | }; 115 | CC2996B71913A7150039CE21 /* Other Frameworks */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | CC2996B81913A7150039CE21 /* AppKit.framework */, 119 | CC2996B91913A7150039CE21 /* CoreData.framework */, 120 | CC2996BA1913A7150039CE21 /* Foundation.framework */, 121 | ); 122 | name = "Other Frameworks"; 123 | sourceTree = ""; 124 | }; 125 | CC2996BB1913A7150039CE21 /* BonjourMac */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | CC2996C71913A7150039CE21 /* CAppDelegate.h */, 129 | CC2996C81913A7150039CE21 /* CAppDelegate.m */, 130 | CC2996CA1913A7150039CE21 /* MainMenu.xib */, 131 | CC2996CD1913A7150039CE21 /* Images.xcassets */, 132 | CC2996BC1913A7150039CE21 /* Supporting Files */, 133 | ); 134 | path = BonjourMac; 135 | sourceTree = ""; 136 | }; 137 | CC2996BC1913A7150039CE21 /* Supporting Files */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | CC2996BD1913A7150039CE21 /* BonjourMac-Info.plist */, 141 | CC2996BE1913A7150039CE21 /* InfoPlist.strings */, 142 | CC2996C11913A7150039CE21 /* main.m */, 143 | CC2996C31913A7150039CE21 /* BonjourMac-Prefix.pch */, 144 | CC2996C41913A7150039CE21 /* Credits.rtf */, 145 | ); 146 | name = "Supporting Files"; 147 | sourceTree = ""; 148 | }; 149 | CC2996D91913A7150039CE21 /* BonjourMacTests */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | CC2996DF1913A7150039CE21 /* BonjourMacTests.m */, 153 | CC2996DA1913A7150039CE21 /* Supporting Files */, 154 | ); 155 | path = BonjourMacTests; 156 | sourceTree = ""; 157 | }; 158 | CC2996DA1913A7150039CE21 /* Supporting Files */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | CC2996DB1913A7150039CE21 /* BonjourMacTests-Info.plist */, 162 | CC2996DC1913A7150039CE21 /* InfoPlist.strings */, 163 | ); 164 | name = "Supporting Files"; 165 | sourceTree = ""; 166 | }; 167 | CC2996E91913A71F0039CE21 /* Controller */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | CC2996F01913A9D20039CE21 /* CHomeViewController.h */, 171 | CC2996F11913A9D20039CE21 /* CHomeViewController.m */, 172 | CC2996F21913A9D20039CE21 /* CHomeViewController.xib */, 173 | ); 174 | name = Controller; 175 | sourceTree = ""; 176 | }; 177 | CC2996F51913AF760039CE21 /* Util */ = { 178 | isa = PBXGroup; 179 | children = ( 180 | CC3E05191917616600416245 /* GCDAsyncSocket.h */, 181 | CC3E051A1917616600416245 /* GCDAsyncSocket.m */, 182 | ); 183 | name = Util; 184 | sourceTree = ""; 185 | }; 186 | /* End PBXGroup section */ 187 | 188 | /* Begin PBXNativeTarget section */ 189 | CC2996B11913A7150039CE21 /* BonjourMac */ = { 190 | isa = PBXNativeTarget; 191 | buildConfigurationList = CC2996E31913A7150039CE21 /* Build configuration list for PBXNativeTarget "BonjourMac" */; 192 | buildPhases = ( 193 | CC2996AE1913A7150039CE21 /* Sources */, 194 | CC2996AF1913A7150039CE21 /* Frameworks */, 195 | CC2996B01913A7150039CE21 /* Resources */, 196 | ); 197 | buildRules = ( 198 | ); 199 | dependencies = ( 200 | ); 201 | name = BonjourMac; 202 | productName = BonjourMac; 203 | productReference = CC2996B21913A7150039CE21 /* BonjourMac.app */; 204 | productType = "com.apple.product-type.application"; 205 | }; 206 | CC2996D21913A7150039CE21 /* BonjourMacTests */ = { 207 | isa = PBXNativeTarget; 208 | buildConfigurationList = CC2996E61913A7150039CE21 /* Build configuration list for PBXNativeTarget "BonjourMacTests" */; 209 | buildPhases = ( 210 | CC2996CF1913A7150039CE21 /* Sources */, 211 | CC2996D01913A7150039CE21 /* Frameworks */, 212 | CC2996D11913A7150039CE21 /* Resources */, 213 | ); 214 | buildRules = ( 215 | ); 216 | dependencies = ( 217 | CC2996D81913A7150039CE21 /* PBXTargetDependency */, 218 | ); 219 | name = BonjourMacTests; 220 | productName = BonjourMacTests; 221 | productReference = CC2996D31913A7150039CE21 /* BonjourMacTests.xctest */; 222 | productType = "com.apple.product-type.bundle.unit-test"; 223 | }; 224 | /* End PBXNativeTarget section */ 225 | 226 | /* Begin PBXProject section */ 227 | CC2996AA1913A7150039CE21 /* Project object */ = { 228 | isa = PBXProject; 229 | attributes = { 230 | CLASSPREFIX = C; 231 | LastUpgradeCheck = 0510; 232 | ORGANIZATIONNAME = Prokarma; 233 | TargetAttributes = { 234 | CC2996D21913A7150039CE21 = { 235 | TestTargetID = CC2996B11913A7150039CE21; 236 | }; 237 | }; 238 | }; 239 | buildConfigurationList = CC2996AD1913A7150039CE21 /* Build configuration list for PBXProject "BonjourMac" */; 240 | compatibilityVersion = "Xcode 3.2"; 241 | developmentRegion = English; 242 | hasScannedForEncodings = 0; 243 | knownRegions = ( 244 | en, 245 | Base, 246 | ); 247 | mainGroup = CC2996A91913A7150039CE21; 248 | productRefGroup = CC2996B31913A7150039CE21 /* Products */; 249 | projectDirPath = ""; 250 | projectRoot = ""; 251 | targets = ( 252 | CC2996B11913A7150039CE21 /* BonjourMac */, 253 | CC2996D21913A7150039CE21 /* BonjourMacTests */, 254 | ); 255 | }; 256 | /* End PBXProject section */ 257 | 258 | /* Begin PBXResourcesBuildPhase section */ 259 | CC2996B01913A7150039CE21 /* Resources */ = { 260 | isa = PBXResourcesBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | CC2996C01913A7150039CE21 /* InfoPlist.strings in Resources */, 264 | CC2996F41913A9D30039CE21 /* CHomeViewController.xib in Resources */, 265 | CC2996CE1913A7150039CE21 /* Images.xcassets in Resources */, 266 | CC2996C61913A7150039CE21 /* Credits.rtf in Resources */, 267 | CC2996CC1913A7150039CE21 /* MainMenu.xib in Resources */, 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | CC2996D11913A7150039CE21 /* Resources */ = { 272 | isa = PBXResourcesBuildPhase; 273 | buildActionMask = 2147483647; 274 | files = ( 275 | CC2996DE1913A7150039CE21 /* InfoPlist.strings in Resources */, 276 | ); 277 | runOnlyForDeploymentPostprocessing = 0; 278 | }; 279 | /* End PBXResourcesBuildPhase section */ 280 | 281 | /* Begin PBXSourcesBuildPhase section */ 282 | CC2996AE1913A7150039CE21 /* Sources */ = { 283 | isa = PBXSourcesBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | CC2996C91913A7150039CE21 /* CAppDelegate.m in Sources */, 287 | CC3E051B1917616600416245 /* GCDAsyncSocket.m in Sources */, 288 | CC2996C21913A7150039CE21 /* main.m in Sources */, 289 | CC2996F31913A9D30039CE21 /* CHomeViewController.m in Sources */, 290 | ); 291 | runOnlyForDeploymentPostprocessing = 0; 292 | }; 293 | CC2996CF1913A7150039CE21 /* Sources */ = { 294 | isa = PBXSourcesBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | CC2996E01913A7150039CE21 /* BonjourMacTests.m in Sources */, 298 | ); 299 | runOnlyForDeploymentPostprocessing = 0; 300 | }; 301 | /* End PBXSourcesBuildPhase section */ 302 | 303 | /* Begin PBXTargetDependency section */ 304 | CC2996D81913A7150039CE21 /* PBXTargetDependency */ = { 305 | isa = PBXTargetDependency; 306 | target = CC2996B11913A7150039CE21 /* BonjourMac */; 307 | targetProxy = CC2996D71913A7150039CE21 /* PBXContainerItemProxy */; 308 | }; 309 | /* End PBXTargetDependency section */ 310 | 311 | /* Begin PBXVariantGroup section */ 312 | CC2996BE1913A7150039CE21 /* InfoPlist.strings */ = { 313 | isa = PBXVariantGroup; 314 | children = ( 315 | CC2996BF1913A7150039CE21 /* en */, 316 | ); 317 | name = InfoPlist.strings; 318 | sourceTree = ""; 319 | }; 320 | CC2996C41913A7150039CE21 /* Credits.rtf */ = { 321 | isa = PBXVariantGroup; 322 | children = ( 323 | CC2996C51913A7150039CE21 /* en */, 324 | ); 325 | name = Credits.rtf; 326 | sourceTree = ""; 327 | }; 328 | CC2996CA1913A7150039CE21 /* MainMenu.xib */ = { 329 | isa = PBXVariantGroup; 330 | children = ( 331 | CC2996CB1913A7150039CE21 /* Base */, 332 | ); 333 | name = MainMenu.xib; 334 | sourceTree = ""; 335 | }; 336 | CC2996DC1913A7150039CE21 /* InfoPlist.strings */ = { 337 | isa = PBXVariantGroup; 338 | children = ( 339 | CC2996DD1913A7150039CE21 /* en */, 340 | ); 341 | name = InfoPlist.strings; 342 | sourceTree = ""; 343 | }; 344 | /* End PBXVariantGroup section */ 345 | 346 | /* Begin XCBuildConfiguration section */ 347 | CC2996E11913A7150039CE21 /* Debug */ = { 348 | isa = XCBuildConfiguration; 349 | buildSettings = { 350 | ALWAYS_SEARCH_USER_PATHS = NO; 351 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 352 | CLANG_CXX_LIBRARY = "libc++"; 353 | CLANG_ENABLE_MODULES = YES; 354 | CLANG_ENABLE_OBJC_ARC = YES; 355 | CLANG_WARN_BOOL_CONVERSION = YES; 356 | CLANG_WARN_CONSTANT_CONVERSION = YES; 357 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 358 | CLANG_WARN_EMPTY_BODY = YES; 359 | CLANG_WARN_ENUM_CONVERSION = YES; 360 | CLANG_WARN_INT_CONVERSION = YES; 361 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 362 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 363 | COPY_PHASE_STRIP = NO; 364 | GCC_C_LANGUAGE_STANDARD = gnu99; 365 | GCC_DYNAMIC_NO_PIC = NO; 366 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 367 | GCC_OPTIMIZATION_LEVEL = 0; 368 | GCC_PREPROCESSOR_DEFINITIONS = ( 369 | "DEBUG=1", 370 | "$(inherited)", 371 | ); 372 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 373 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 374 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 375 | GCC_WARN_UNDECLARED_SELECTOR = YES; 376 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 377 | GCC_WARN_UNUSED_FUNCTION = YES; 378 | GCC_WARN_UNUSED_VARIABLE = YES; 379 | MACOSX_DEPLOYMENT_TARGET = 10.9; 380 | ONLY_ACTIVE_ARCH = YES; 381 | SDKROOT = macosx; 382 | }; 383 | name = Debug; 384 | }; 385 | CC2996E21913A7150039CE21 /* Release */ = { 386 | isa = XCBuildConfiguration; 387 | buildSettings = { 388 | ALWAYS_SEARCH_USER_PATHS = NO; 389 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 390 | CLANG_CXX_LIBRARY = "libc++"; 391 | CLANG_ENABLE_MODULES = YES; 392 | CLANG_ENABLE_OBJC_ARC = YES; 393 | CLANG_WARN_BOOL_CONVERSION = YES; 394 | CLANG_WARN_CONSTANT_CONVERSION = YES; 395 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 396 | CLANG_WARN_EMPTY_BODY = YES; 397 | CLANG_WARN_ENUM_CONVERSION = YES; 398 | CLANG_WARN_INT_CONVERSION = YES; 399 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 400 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 401 | COPY_PHASE_STRIP = YES; 402 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 403 | ENABLE_NS_ASSERTIONS = NO; 404 | GCC_C_LANGUAGE_STANDARD = gnu99; 405 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 406 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 407 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 408 | GCC_WARN_UNDECLARED_SELECTOR = YES; 409 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 410 | GCC_WARN_UNUSED_FUNCTION = YES; 411 | GCC_WARN_UNUSED_VARIABLE = YES; 412 | MACOSX_DEPLOYMENT_TARGET = 10.9; 413 | SDKROOT = macosx; 414 | }; 415 | name = Release; 416 | }; 417 | CC2996E41913A7150039CE21 /* Debug */ = { 418 | isa = XCBuildConfiguration; 419 | buildSettings = { 420 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 421 | COMBINE_HIDPI_IMAGES = YES; 422 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 423 | GCC_PREFIX_HEADER = "BonjourMac/BonjourMac-Prefix.pch"; 424 | INFOPLIST_FILE = "BonjourMac/BonjourMac-Info.plist"; 425 | PRODUCT_NAME = "$(TARGET_NAME)"; 426 | WRAPPER_EXTENSION = app; 427 | }; 428 | name = Debug; 429 | }; 430 | CC2996E51913A7150039CE21 /* Release */ = { 431 | isa = XCBuildConfiguration; 432 | buildSettings = { 433 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 434 | COMBINE_HIDPI_IMAGES = YES; 435 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 436 | GCC_PREFIX_HEADER = "BonjourMac/BonjourMac-Prefix.pch"; 437 | INFOPLIST_FILE = "BonjourMac/BonjourMac-Info.plist"; 438 | PRODUCT_NAME = "$(TARGET_NAME)"; 439 | WRAPPER_EXTENSION = app; 440 | }; 441 | name = Release; 442 | }; 443 | CC2996E71913A7150039CE21 /* Debug */ = { 444 | isa = XCBuildConfiguration; 445 | buildSettings = { 446 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BonjourMac.app/Contents/MacOS/BonjourMac"; 447 | COMBINE_HIDPI_IMAGES = YES; 448 | FRAMEWORK_SEARCH_PATHS = ( 449 | "$(DEVELOPER_FRAMEWORKS_DIR)", 450 | "$(inherited)", 451 | ); 452 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 453 | GCC_PREFIX_HEADER = "BonjourMac/BonjourMac-Prefix.pch"; 454 | GCC_PREPROCESSOR_DEFINITIONS = ( 455 | "DEBUG=1", 456 | "$(inherited)", 457 | ); 458 | INFOPLIST_FILE = "BonjourMacTests/BonjourMacTests-Info.plist"; 459 | PRODUCT_NAME = "$(TARGET_NAME)"; 460 | TEST_HOST = "$(BUNDLE_LOADER)"; 461 | WRAPPER_EXTENSION = xctest; 462 | }; 463 | name = Debug; 464 | }; 465 | CC2996E81913A7150039CE21 /* Release */ = { 466 | isa = XCBuildConfiguration; 467 | buildSettings = { 468 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BonjourMac.app/Contents/MacOS/BonjourMac"; 469 | COMBINE_HIDPI_IMAGES = YES; 470 | FRAMEWORK_SEARCH_PATHS = ( 471 | "$(DEVELOPER_FRAMEWORKS_DIR)", 472 | "$(inherited)", 473 | ); 474 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 475 | GCC_PREFIX_HEADER = "BonjourMac/BonjourMac-Prefix.pch"; 476 | INFOPLIST_FILE = "BonjourMacTests/BonjourMacTests-Info.plist"; 477 | PRODUCT_NAME = "$(TARGET_NAME)"; 478 | TEST_HOST = "$(BUNDLE_LOADER)"; 479 | WRAPPER_EXTENSION = xctest; 480 | }; 481 | name = Release; 482 | }; 483 | /* End XCBuildConfiguration section */ 484 | 485 | /* Begin XCConfigurationList section */ 486 | CC2996AD1913A7150039CE21 /* Build configuration list for PBXProject "BonjourMac" */ = { 487 | isa = XCConfigurationList; 488 | buildConfigurations = ( 489 | CC2996E11913A7150039CE21 /* Debug */, 490 | CC2996E21913A7150039CE21 /* Release */, 491 | ); 492 | defaultConfigurationIsVisible = 0; 493 | defaultConfigurationName = Release; 494 | }; 495 | CC2996E31913A7150039CE21 /* Build configuration list for PBXNativeTarget "BonjourMac" */ = { 496 | isa = XCConfigurationList; 497 | buildConfigurations = ( 498 | CC2996E41913A7150039CE21 /* Debug */, 499 | CC2996E51913A7150039CE21 /* Release */, 500 | ); 501 | defaultConfigurationIsVisible = 0; 502 | defaultConfigurationName = Release; 503 | }; 504 | CC2996E61913A7150039CE21 /* Build configuration list for PBXNativeTarget "BonjourMacTests" */ = { 505 | isa = XCConfigurationList; 506 | buildConfigurations = ( 507 | CC2996E71913A7150039CE21 /* Debug */, 508 | CC2996E81913A7150039CE21 /* Release */, 509 | ); 510 | defaultConfigurationIsVisible = 0; 511 | defaultConfigurationName = Release; 512 | }; 513 | /* End XCConfigurationList section */ 514 | }; 515 | rootObject = CC2996AA1913A7150039CE21 /* Project object */; 516 | } 517 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/project.xcworkspace/xcuserdata/Boobalan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boobalaninfo/Bonjour-iOS-MAC-Apps/bed7bb637a611675ac3928213ab4718d600f8083/BonjourMac/BonjourMac.xcodeproj/project.xcworkspace/xcuserdata/Boobalan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/project.xcworkspace/xcuserdata/mboobalan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boobalaninfo/Bonjour-iOS-MAC-Apps/bed7bb637a611675ac3928213ab4718d600f8083/BonjourMac/BonjourMac.xcodeproj/project.xcworkspace/xcuserdata/mboobalan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/project.xcworkspace/xcuserdata/mboobalan.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges 6 | 7 | SnapshotAutomaticallyBeforeSignificantChanges 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/xcuserdata/Boobalan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/xcuserdata/Boobalan.xcuserdatad/xcschemes/BonjourMac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/xcuserdata/Boobalan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BonjourMac.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | CC2996B11913A7150039CE21 16 | 17 | primary 18 | 19 | 20 | CC2996D21913A7150039CE21 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/xcuserdata/mboobalan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/xcuserdata/mboobalan.xcuserdatad/xcschemes/BonjourMac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 61 | 62 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac.xcodeproj/xcuserdata/mboobalan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BonjourMac.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | CC2996B11913A7150039CE21 16 | 17 | primary 18 | 19 | 20 | CC2996D21913A7150039CE21 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 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 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | Default 539 | 540 | 541 | 542 | 543 | 544 | 545 | Left to Right 546 | 547 | 548 | 549 | 550 | 551 | 552 | Right to Left 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | Default 564 | 565 | 566 | 567 | 568 | 569 | 570 | Left to Right 571 | 572 | 573 | 574 | 575 | 576 | 577 | Right to Left 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/BonjourMac-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | com.greateindiaclub.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSMinimumSystemVersion 26 | ${MACOSX_DEPLOYMENT_TARGET} 27 | NSHumanReadableCopyright 28 | Copyright © 2014 greateindiaclub. All rights reserved. 29 | NSMainNibFile 30 | MainMenu 31 | NSPrincipalClass 32 | NSApplication 33 | 34 | 35 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/BonjourMac-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | #import 9 | #endif 10 | #ifdef DEBUG 11 | 12 | #define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 13 | 14 | #else 15 | 16 | #define DLog(...) 17 | 18 | #endif 19 | 20 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/CAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CAppDelegate.h 3 | // BonjourMac 4 | // 5 | // Created by Boobalan Munusamy on 5/2/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CHomeViewController.h" 11 | @interface CAppDelegate : NSObject 12 | 13 | @property (assign) IBOutlet NSWindow *window; 14 | @property (nonatomic,strong) IBOutlet CHomeViewController *homeController; 15 | @end 16 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/CAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CAppDelegate.m 3 | // BonjourMac 4 | // 5 | // Created by Boobalan Munusamy on 5/2/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import "CAppDelegate.h" 10 | #import "CHomeViewController.h" 11 | 12 | @implementation CAppDelegate 13 | 14 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 15 | { 16 | // Insert code here to initialize your application 17 | self.homeController = [[CHomeViewController alloc]initWithNibName:@"CHomeViewController" bundle:nil]; 18 | 19 | NSMutableArray* arrDevice=[[NSMutableArray alloc]init]; 20 | //[arrDevice addObject:coDevice]; 21 | 22 | 23 | self.homeController.arrDevices=arrDevice; 24 | [self.window.contentView addSubview:self.homeController.view]; 25 | self.homeController.view.frame = ((NSView*)self.window.contentView).bounds; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/en.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} 2 | {\colortbl;\red255\green255\blue255;} 3 | \paperw9840\paperh8400 4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 5 | 6 | \f0\b\fs24 \cf0 Engineering: 7 | \b0 \ 8 | Some people\ 9 | \ 10 | 11 | \b Human Interface Design: 12 | \b0 \ 13 | Some other people\ 14 | \ 15 | 16 | \b Testing: 17 | \b0 \ 18 | Hopefully not nobody\ 19 | \ 20 | 21 | \b Documentation: 22 | \b0 \ 23 | Whoever\ 24 | \ 25 | 26 | \b With special thanks to: 27 | \b0 \ 28 | Mom\ 29 | } 30 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMac/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BonjourMac 4 | // 5 | // Created by Boobalan Munusamy on 5/2/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) 12 | { 13 | return NSApplicationMain(argc, argv); 14 | } 15 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMacTests/BonjourMacTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.greateindiaclub.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMacTests/BonjourMacTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BonjourMacTests.m 3 | // BonjourMacTests 4 | // 5 | // Created by Boobalan Munusamy on 5/2/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BonjourMacTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation BonjourMacTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /BonjourMac/BonjourMacTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /BonjourMac/CHomeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CHomeViewController.h 3 | // BonjourMac 4 | // 5 | // Created by Boobalan Munusamy on 5/2/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "GCDAsyncSocket.h" 11 | 12 | @interface CHomeViewController : NSViewController 13 | @property(strong) NSMutableArray* arrDevices; 14 | @end 15 | -------------------------------------------------------------------------------- /BonjourMac/CHomeViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CHomeViewController.m 3 | // BonjourMac 4 | // 5 | // Created by Boobalan Munusamy on 5/2/14. 6 | // Copyright (c) 2014 greateindiaclub. All rights reserved. 7 | // 8 | 9 | #import "CHomeViewController.h" 10 | 11 | 12 | 13 | #define SERVICE_NAME @"_probonjore._tcp." 14 | #define ACK_SERVICE_NAME @"_ack._tcp." 15 | 16 | @interface CHomeViewController(){ 17 | } 18 | @property (weak) IBOutlet NSTextFieldCell *txtLogs; 19 | 20 | @property(nonatomic,strong) NSNetServiceBrowser* coServiceBrowser; 21 | @property (weak) IBOutlet NSTableView *tblView; 22 | 23 | @property(nonatomic, strong) NSMutableData* mutableData; 24 | @property (weak) IBOutlet NSTextField *lblConnected; 25 | 26 | @property (weak) IBOutlet NSTextField *txtInfo; 27 | @property (weak) IBOutlet NSButton *btnSendInfo; 28 | 29 | @property(nonatomic,strong) NSMutableDictionary* dictSockets; 30 | 31 | @property(nonatomic,strong) NSNetService * service; 32 | @property(nonatomic,strong) GCDAsyncSocket* socket; 33 | 34 | @property(nonatomic, strong) NSMutableData* dataBuffer; 35 | @end 36 | 37 | @implementation CHomeViewController 38 | 39 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 40 | { 41 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 42 | if (self) { 43 | // Initialization code here. 44 | 45 | [self startService]; 46 | // [self publishService]; 47 | _dictSockets=[NSMutableDictionary dictionary]; 48 | _dataBuffer = [NSMutableData data]; 49 | } 50 | return self; 51 | } 52 | 53 | 54 | 55 | -(void)startService{ 56 | if (self.arrDevices) { 57 | [self.arrDevices removeAllObjects]; 58 | 59 | }else{ 60 | _arrDevices=[NSMutableArray array]; 61 | } 62 | 63 | _coServiceBrowser=[[NSNetServiceBrowser alloc]init]; 64 | self.coServiceBrowser.delegate=self; 65 | [self.coServiceBrowser searchForServicesOfType:SERVICE_NAME inDomain:@"local."]; 66 | 67 | } 68 | 69 | #pragma mark- Delegates 70 | 71 | - (NSView *)tableView:(NSTableView *)tableView 72 | viewForTableColumn:(NSTableColumn *)tableColumn 73 | row:(NSInteger)row { 74 | 75 | // Retrieve to get the @"MyView" from the pool or, 76 | // if no version is available in the pool, load the Interface Builder version 77 | NSTableCellView *result = [tableView makeViewWithIdentifier:@"DeviceName" owner:self]; 78 | 79 | 80 | if (self.arrDevices.count==0) { 81 | result.textField.stringValue=@"Search Bonjour Devices...."; 82 | }else{ 83 | // Set the stringValue of the cell's text field to the nameArray value at row 84 | NSNetService* coService=[self.arrDevices objectAtIndex:row]; 85 | result.textField.stringValue = coService.name; 86 | } 87 | 88 | 89 | // Return the result 90 | return result; 91 | } 92 | 93 | 94 | 95 | -(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView{ 96 | if (self.arrDevices.count==0) { 97 | return 1; 98 | }else{ 99 | return self.arrDevices.count; 100 | } 101 | 102 | } 103 | 104 | 105 | - (void)tableViewSelectionDidChange:(NSNotification *)aNotification{ 106 | NSLog(@"%@", aNotification.userInfo); 107 | 108 | 109 | NSNetService* coService =[self.arrDevices objectAtIndex:self.tblView.selectedRow]; 110 | 111 | NSLog(@"Selected Device %@", coService.name); 112 | coService.delegate=self; 113 | [coService resolveWithTimeout:30.0f]; 114 | 115 | 116 | 117 | 118 | } 119 | 120 | 121 | #pragma mark - Service Delegate 122 | 123 | -(void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict{ 124 | 125 | DLog(@"Didnot resolved: %@", errorDict); 126 | [sender setDelegate:self 127 | ]; 128 | } 129 | 130 | -(void)netServiceDidResolveAddress:(NSNetService *)sender{ 131 | DLog(@"netServiceDidResolveAddress %@", sender.name); 132 | if ([self connectWithServer:sender]) { 133 | DLog("Connected with server"); 134 | NSString* str=[NSString stringWithFormat:@"Connected with %@", sender.name]; 135 | DLog(@"Device ") 136 | self.lblConnected.stringValue=str ; 137 | self.lblConnected.textColor=[NSColor greenColor]; 138 | } 139 | } 140 | 141 | 142 | 143 | 144 | -(BOOL)connectWithServer:(NSNetService*)service{ 145 | BOOL isConnected=NO; 146 | 147 | NSArray* arrAddress =[[service addresses] mutableCopy]; 148 | GCDAsyncSocket * coSocket= [self.dictSockets objectForKey:service.name]; 149 | 150 | 151 | if (!coSocket || ![coSocket isConnected]) { 152 | GCDAsyncSocket * coSocket=[[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 153 | 154 | //Connect 155 | while (!isConnected && [arrAddress count]) { 156 | NSData* address= [arrAddress objectAtIndex:0]; 157 | NSError* error; 158 | if ([coSocket connectToAddress:address error:&error]) { 159 | [self.dictSockets setObject:coSocket forKey:service.name]; 160 | isConnected=YES; 161 | }else if(error){ 162 | DLog(@"Unable to connect with Device %@ userinfo %@", error,error.userInfo); 163 | } 164 | } 165 | }else{ 166 | isConnected = [coSocket isConnected]; 167 | } 168 | 169 | 170 | return isConnected; 171 | } 172 | 173 | 174 | #pragma mark GCDAsyncSocket delegate 175 | -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{ 176 | DLog(@"Connected to host: %@ port: %hu", host, port); 177 | [sock readDataToLength:sizeof(uint64_t) withTimeout:-1.0 tag:0]; 178 | 179 | 180 | self.txtLogs.stringValue=@""; 181 | self.lblConnected.stringValue=@"Connected with "; 182 | 183 | } 184 | 185 | 186 | -(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{ 187 | DLog(@"Disconnected to host: %@", err.userInfo); 188 | 189 | self.lblConnected.stringValue= [NSString stringWithFormat:@"No device is connected"]; 190 | self.lblConnected.textColor=[NSColor redColor]; 191 | 192 | } 193 | 194 | 195 | -(GCDAsyncSocket*)getSelectedSocket{ 196 | NSNetService* coService =[self.arrDevices objectAtIndex:self.tblView.selectedRow]; 197 | return [self.dictSockets objectForKey:coService.name]; 198 | 199 | } 200 | 201 | 202 | -(void) socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 203 | DLog(@"Read data"); 204 | 205 | if ([self getSelectedSocket]== sock) { 206 | [_dataBuffer appendData:data]; 207 | if ([sock socketAvailableBytes] == 0) { 208 | //[sock socketFDBytesAvailable]; 209 | NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:_dataBuffer options:NSJSONReadingMutableLeaves error:nil]; 210 | DLog("Dictionary Info: %@", dict); 211 | NSString* strInfo = (NSString*)[dict objectForKey:@"data"]; 212 | [_dataBuffer setLength:0]; 213 | self.txtLogs.stringValue= strInfo; 214 | } 215 | 216 | } 217 | 218 | 219 | 220 | [sock readDataWithTimeout:-1.0f tag:0]; 221 | 222 | 223 | } 224 | 225 | 226 | -(void)socketDidCloseReadStream:(GCDAsyncSocket *)sock{ 227 | DLog(@"Read stream is closed"); 228 | 229 | 230 | } 231 | #pragma mark- Service browser delegate; 232 | 233 | -(void)stopBrowsing{ 234 | if (self.coServiceBrowser) { 235 | [self.coServiceBrowser stop]; 236 | self.coServiceBrowser.delegate=nil; 237 | [self setCoServiceBrowser:nil]; 238 | } 239 | } 240 | 241 | -(void) netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser{ 242 | [self stopBrowsing]; 243 | } 244 | -(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict{ 245 | [self stopBrowsing]; 246 | } 247 | 248 | 249 | -(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)moreComing{ 250 | if (aNetService) { 251 | 252 | [self.arrDevices removeObject:aNetService]; 253 | } 254 | 255 | if (!moreComing) { 256 | [self.tblView reloadData]; 257 | } 258 | } 259 | 260 | - (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing{ 261 | if (aNetService) { 262 | [self.arrDevices addObject:aNetService]; 263 | } 264 | 265 | if (!moreComing) { 266 | [self.arrDevices sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]]; 267 | [self.tblView reloadData]; 268 | } 269 | } 270 | 271 | 272 | #pragma mark - Send info 273 | - (IBAction)btnSendInfo:(id)sender { 274 | 275 | NSData* data=[self.txtInfo.stringValue dataUsingEncoding:NSUTF8StringEncoding]; 276 | 277 | 278 | [[self getSelectedSocket] writeData:data withTimeout:-1.0f tag:0]; 279 | 280 | DLog(@"Write Data"); 281 | 282 | 283 | } 284 | 285 | 286 | @end 287 | -------------------------------------------------------------------------------- /BonjourMac/CHomeViewController.xib: -------------------------------------------------------------------------------- 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 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 110 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 144 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Bonjour-iOS-MAC-Apps 2 | ====================== 3 | 4 | This is sample iOS and iMac application, these application exchange the data using Bonjour protocal. 5 | 6 | 1. Download both application 7 | 2. BonjourIOS folder has iPhone application 8 | 3. BonjourMac folder has iMAC application 9 | 4. Start both application 10 | 5. iPhone broadcast the services and iMac listen for the services 11 | 6. Once iMac show the device in the list, just do click 12 | 7. Then it will resolve and establish the connection between them 13 | 8. Send/Receive the messages vice versa from both the devices 14 | 15 | --------------------------------------------------------------------------------