Client via Swift | V1.1
@@ -7,219 +7,137 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
ECB32E3718210D1D00D3C886 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = ECB32E3618210D1D00D3C886 /* Reachability.m */; };
|
||||
ECB32E3918210F3A00D3C886 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ECB32E3818210F3A00D3C886 /* SystemConfiguration.framework */; };
|
||||
ECB963CC18228F42006F370E /* statusbar-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = ECB963CB18228F42006F370E /* statusbar-icon.png */; };
|
||||
ECB963D01822943E006F370E /* ImageHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = ECB963CF1822943E006F370E /* ImageHelper.m */; };
|
||||
ECDDC036182D0C7C002B76C1 /* feet.png in Resources */ = {isa = PBXBuildFile; fileRef = ECDDC035182D0C7C002B76C1 /* feet.png */; };
|
||||
ECE5811B181A77090066D073 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ECE5811A181A77090066D073 /* Cocoa.framework */; };
|
||||
ECE58125181A77090066D073 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = ECE58123181A77090066D073 /* InfoPlist.strings */; };
|
||||
ECE58127181A77090066D073 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE58126181A77090066D073 /* main.m */; };
|
||||
ECE5812B181A77090066D073 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = ECE58129181A77090066D073 /* Credits.rtf */; };
|
||||
ECE5812E181A77090066D073 /* ipbcAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE5812D181A77090066D073 /* ipbcAppDelegate.m */; };
|
||||
ECE58131181A77090066D073 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECE5812F181A77090066D073 /* MainMenu.xib */; };
|
||||
ECE58133181A77090066D073 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ECE58132181A77090066D073 /* Images.xcassets */; };
|
||||
ECE5813A181A77090066D073 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ECE58139181A77090066D073 /* XCTest.framework */; };
|
||||
ECE5813B181A77090066D073 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ECE5811A181A77090066D073 /* Cocoa.framework */; };
|
||||
ECE58143181A77090066D073 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = ECE58141181A77090066D073 /* InfoPlist.strings */; };
|
||||
ECE58145181A77090066D073 /* ipbc_ClientTests.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE58144181A77090066D073 /* ipbc_ClientTests.m */; };
|
||||
ECE6FED6181E8AFE004F6C1F /* WebserviceClient.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE6FED5181E8AFD004F6C1F /* WebserviceClient.m */; };
|
||||
ECE6FEDA181E8BE4004F6C1F /* WebServiceConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE6FED9181E8BE4004F6C1F /* WebServiceConstants.m */; };
|
||||
ECEBE1881BA0639500E5B4E3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1871BA0639500E5B4E3 /* AppDelegate.swift */; };
|
||||
ECEBE18A1BA0639500E5B4E3 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ECEBE1891BA0639500E5B4E3 /* Images.xcassets */; };
|
||||
ECEBE18D1BA0639500E5B4E3 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECEBE18B1BA0639500E5B4E3 /* MainMenu.xib */; };
|
||||
ECEBE1991BA0639500E5B4E3 /* ipbc_ClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */; };
|
||||
ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */; };
|
||||
ECEBE1A51BA0690B00E5B4E3 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
ECE5813C181A77090066D073 /* PBXContainerItemProxy */ = {
|
||||
ECEBE1931BA0639500E5B4E3 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = ECE5810F181A77090066D073 /* Project object */;
|
||||
containerPortal = ECEBE17A1BA0639500E5B4E3 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = ECE58116181A77090066D073;
|
||||
remoteGlobalIDString = ECEBE1811BA0639500E5B4E3;
|
||||
remoteInfo = "ipbc-Client";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
ECB32E3518210D1D00D3C886 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; };
|
||||
ECB32E3618210D1D00D3C886 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = "<group>"; };
|
||||
ECB32E3818210F3A00D3C886 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
||||
ECB963CB18228F42006F370E /* statusbar-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "statusbar-icon.png"; sourceTree = "<group>"; };
|
||||
ECB963CE1822943E006F370E /* ImageHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageHelper.h; sourceTree = "<group>"; };
|
||||
ECB963CF1822943E006F370E /* ImageHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageHelper.m; sourceTree = "<group>"; };
|
||||
ECCE9DCC18B80EC4006C032B /* ipbc-Client.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "ipbc-Client.entitlements"; sourceTree = "<group>"; };
|
||||
ECDDC035182D0C7C002B76C1 /* feet.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feet.png; sourceTree = "<group>"; };
|
||||
ECE58117181A77090066D073 /* ipbc-Client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ipbc-Client.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
ECE5811A181A77090066D073 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
ECE5811D181A77090066D073 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||
ECE5811E181A77090066D073 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||
ECE5811F181A77090066D073 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
ECE58122181A77090066D073 /* ipbc-Client-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ipbc-Client-Info.plist"; sourceTree = "<group>"; };
|
||||
ECE58124181A77090066D073 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
ECE58126181A77090066D073 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
ECE58128181A77090066D073 /* ipbc-Client-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ipbc-Client-Prefix.pch"; sourceTree = "<group>"; };
|
||||
ECE5812A181A77090066D073 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||
ECE5812C181A77090066D073 /* ipbcAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ipbcAppDelegate.h; sourceTree = "<group>"; };
|
||||
ECE5812D181A77090066D073 /* ipbcAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ipbcAppDelegate.m; sourceTree = "<group>"; };
|
||||
ECE58130181A77090066D073 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
ECE58132181A77090066D073 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
ECE58138181A77090066D073 /* ipbc-ClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ipbc-ClientTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
ECE58139181A77090066D073 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
||||
ECE58140181A77090066D073 /* ipbc-ClientTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ipbc-ClientTests-Info.plist"; sourceTree = "<group>"; };
|
||||
ECE58142181A77090066D073 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
ECE58144181A77090066D073 /* ipbc_ClientTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ipbc_ClientTests.m; sourceTree = "<group>"; };
|
||||
ECE6FED4181E8AFD004F6C1F /* WebserviceClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebserviceClient.h; sourceTree = "<group>"; };
|
||||
ECE6FED5181E8AFD004F6C1F /* WebserviceClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebserviceClient.m; sourceTree = "<group>"; };
|
||||
ECE6FED8181E8BE4004F6C1F /* WebServiceConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebServiceConstants.h; sourceTree = "<group>"; };
|
||||
ECE6FED9181E8BE4004F6C1F /* WebServiceConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebServiceConstants.m; sourceTree = "<group>"; };
|
||||
ECEBE1821BA0639500E5B4E3 /* ipbc-Client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ipbc-Client.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
ECEBE1861BA0639500E5B4E3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
ECEBE1871BA0639500E5B4E3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
ECEBE1891BA0639500E5B4E3 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
ECEBE18C1BA0639500E5B4E3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
ECEBE1921BA0639500E5B4E3 /* ipbc-ClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ipbc-ClientTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
ECEBE1971BA0639500E5B4E3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ipbc_ClientTests.swift; sourceTree = "<group>"; };
|
||||
ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainViewController.swift; path = Controller/MainViewController.swift; sourceTree = "<group>"; };
|
||||
ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainViewController.xib; path = Controller/MainViewController.xib; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
ECE58114181A77090066D073 /* Frameworks */ = {
|
||||
ECEBE17F1BA0639500E5B4E3 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ECB32E3918210F3A00D3C886 /* SystemConfiguration.framework in Frameworks */,
|
||||
ECE5811B181A77090066D073 /* Cocoa.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ECE58135181A77090066D073 /* Frameworks */ = {
|
||||
ECEBE18F1BA0639500E5B4E3 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ECE5813B181A77090066D073 /* Cocoa.framework in Frameworks */,
|
||||
ECE5813A181A77090066D073 /* XCTest.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
ECB963CA18228F29006F370E /* images */ = {
|
||||
ECEBE1791BA0639500E5B4E3 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECDDC035182D0C7C002B76C1 /* feet.png */,
|
||||
ECB963CB18228F42006F370E /* statusbar-icon.png */,
|
||||
);
|
||||
name = images;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECB963CD18229423006F370E /* Helper */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECB963CE1822943E006F370E /* ImageHelper.h */,
|
||||
ECB963CF1822943E006F370E /* ImageHelper.m */,
|
||||
);
|
||||
name = Helper;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE5810E181A77090066D073 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE58120181A77090066D073 /* ipbc-Client */,
|
||||
ECE5813E181A77090066D073 /* ipbc-ClientTests */,
|
||||
ECE58119181A77090066D073 /* Frameworks */,
|
||||
ECE58118181A77090066D073 /* Products */,
|
||||
ECEBE1841BA0639500E5B4E3 /* ipbc-Client */,
|
||||
ECEBE1951BA0639500E5B4E3 /* ipbc-ClientTests */,
|
||||
ECEBE1831BA0639500E5B4E3 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE58118181A77090066D073 /* Products */ = {
|
||||
ECEBE1831BA0639500E5B4E3 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE58117181A77090066D073 /* ipbc-Client.app */,
|
||||
ECE58138181A77090066D073 /* ipbc-ClientTests.xctest */,
|
||||
ECEBE1821BA0639500E5B4E3 /* ipbc-Client.app */,
|
||||
ECEBE1921BA0639500E5B4E3 /* ipbc-ClientTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE58119181A77090066D073 /* Frameworks */ = {
|
||||
ECEBE1841BA0639500E5B4E3 /* ipbc-Client */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECB32E3818210F3A00D3C886 /* SystemConfiguration.framework */,
|
||||
ECE5811A181A77090066D073 /* Cocoa.framework */,
|
||||
ECE58139181A77090066D073 /* XCTest.framework */,
|
||||
ECE5811C181A77090066D073 /* Other Frameworks */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE5811C181A77090066D073 /* Other Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE5811D181A77090066D073 /* AppKit.framework */,
|
||||
ECE5811E181A77090066D073 /* CoreData.framework */,
|
||||
ECE5811F181A77090066D073 /* Foundation.framework */,
|
||||
);
|
||||
name = "Other Frameworks";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE58120181A77090066D073 /* ipbc-Client */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECCE9DCC18B80EC4006C032B /* ipbc-Client.entitlements */,
|
||||
ECB963CD18229423006F370E /* Helper */,
|
||||
ECB963CA18228F29006F370E /* images */,
|
||||
ECE6FED7181E8B1C004F6C1F /* WebService */,
|
||||
ECE5812C181A77090066D073 /* ipbcAppDelegate.h */,
|
||||
ECE5812D181A77090066D073 /* ipbcAppDelegate.m */,
|
||||
ECE5812F181A77090066D073 /* MainMenu.xib */,
|
||||
ECE58132181A77090066D073 /* Images.xcassets */,
|
||||
ECE58121181A77090066D073 /* Supporting Files */,
|
||||
ECEBE1A71BA0693200E5B4E3 /* control */,
|
||||
ECEBE1A61BA0692000E5B4E3 /* view */,
|
||||
ECEBE1871BA0639500E5B4E3 /* AppDelegate.swift */,
|
||||
ECEBE1891BA0639500E5B4E3 /* Images.xcassets */,
|
||||
ECEBE1851BA0639500E5B4E3 /* Supporting Files */,
|
||||
);
|
||||
path = "ipbc-Client";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE58121181A77090066D073 /* Supporting Files */ = {
|
||||
ECEBE1851BA0639500E5B4E3 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE58122181A77090066D073 /* ipbc-Client-Info.plist */,
|
||||
ECE58123181A77090066D073 /* InfoPlist.strings */,
|
||||
ECE58126181A77090066D073 /* main.m */,
|
||||
ECE58128181A77090066D073 /* ipbc-Client-Prefix.pch */,
|
||||
ECE58129181A77090066D073 /* Credits.rtf */,
|
||||
ECEBE1861BA0639500E5B4E3 /* Info.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE5813E181A77090066D073 /* ipbc-ClientTests */ = {
|
||||
ECEBE1951BA0639500E5B4E3 /* ipbc-ClientTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE58144181A77090066D073 /* ipbc_ClientTests.m */,
|
||||
ECE5813F181A77090066D073 /* Supporting Files */,
|
||||
ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */,
|
||||
ECEBE1961BA0639500E5B4E3 /* Supporting Files */,
|
||||
);
|
||||
path = "ipbc-ClientTests";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE5813F181A77090066D073 /* Supporting Files */ = {
|
||||
ECEBE1961BA0639500E5B4E3 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE58140181A77090066D073 /* ipbc-ClientTests-Info.plist */,
|
||||
ECE58141181A77090066D073 /* InfoPlist.strings */,
|
||||
ECEBE1971BA0639500E5B4E3 /* Info.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE6FED7181E8B1C004F6C1F /* WebService */ = {
|
||||
ECEBE1A61BA0692000E5B4E3 /* view */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECE6FED4181E8AFD004F6C1F /* WebserviceClient.h */,
|
||||
ECE6FED5181E8AFD004F6C1F /* WebserviceClient.m */,
|
||||
ECE6FED8181E8BE4004F6C1F /* WebServiceConstants.h */,
|
||||
ECE6FED9181E8BE4004F6C1F /* WebServiceConstants.m */,
|
||||
ECB32E3518210D1D00D3C886 /* Reachability.h */,
|
||||
ECB32E3618210D1D00D3C886 /* Reachability.m */,
|
||||
ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */,
|
||||
ECEBE18B1BA0639500E5B4E3 /* MainMenu.xib */,
|
||||
);
|
||||
name = WebService;
|
||||
name = view;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECEBE1A71BA0693200E5B4E3 /* control */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */,
|
||||
);
|
||||
name = control;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
ECE58116181A77090066D073 /* ipbc-Client */ = {
|
||||
ECEBE1811BA0639500E5B4E3 /* ipbc-Client */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = ECE58148181A77090066D073 /* Build configuration list for PBXNativeTarget "ipbc-Client" */;
|
||||
buildConfigurationList = ECEBE19C1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-Client" */;
|
||||
buildPhases = (
|
||||
ECE58113181A77090066D073 /* Sources */,
|
||||
ECE58114181A77090066D073 /* Frameworks */,
|
||||
ECE58115181A77090066D073 /* Resources */,
|
||||
ECEBE17E1BA0639500E5B4E3 /* Sources */,
|
||||
ECEBE17F1BA0639500E5B4E3 /* Frameworks */,
|
||||
ECEBE1801BA0639500E5B4E3 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -227,51 +145,46 @@
|
||||
);
|
||||
name = "ipbc-Client";
|
||||
productName = "ipbc-Client";
|
||||
productReference = ECE58117181A77090066D073 /* ipbc-Client.app */;
|
||||
productReference = ECEBE1821BA0639500E5B4E3 /* ipbc-Client.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
ECE58137181A77090066D073 /* ipbc-ClientTests */ = {
|
||||
ECEBE1911BA0639500E5B4E3 /* ipbc-ClientTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = ECE5814B181A77090066D073 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */;
|
||||
buildConfigurationList = ECEBE19F1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */;
|
||||
buildPhases = (
|
||||
ECE58134181A77090066D073 /* Sources */,
|
||||
ECE58135181A77090066D073 /* Frameworks */,
|
||||
ECE58136181A77090066D073 /* Resources */,
|
||||
ECEBE18E1BA0639500E5B4E3 /* Sources */,
|
||||
ECEBE18F1BA0639500E5B4E3 /* Frameworks */,
|
||||
ECEBE1901BA0639500E5B4E3 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
ECE5813D181A77090066D073 /* PBXTargetDependency */,
|
||||
ECEBE1941BA0639500E5B4E3 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "ipbc-ClientTests";
|
||||
productName = "ipbc-ClientTests";
|
||||
productReference = ECE58138181A77090066D073 /* ipbc-ClientTests.xctest */;
|
||||
productReference = ECEBE1921BA0639500E5B4E3 /* ipbc-ClientTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
ECE5810F181A77090066D073 /* Project object */ = {
|
||||
ECEBE17A1BA0639500E5B4E3 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
CLASSPREFIX = ipbc;
|
||||
LastUpgradeCheck = 0500;
|
||||
LastUpgradeCheck = 0640;
|
||||
ORGANIZATIONNAME = "Adawim UG (haftungsbeschränkt)";
|
||||
TargetAttributes = {
|
||||
ECE58116181A77090066D073 = {
|
||||
DevelopmentTeam = H474U3TZ74;
|
||||
SystemCapabilities = {
|
||||
com.apple.Sandbox = {
|
||||
enabled = 1;
|
||||
};
|
||||
};
|
||||
ECEBE1811BA0639500E5B4E3 = {
|
||||
CreatedOnToolsVersion = 6.4;
|
||||
};
|
||||
ECE58137181A77090066D073 = {
|
||||
TestTargetID = ECE58116181A77090066D073;
|
||||
ECEBE1911BA0639500E5B4E3 = {
|
||||
CreatedOnToolsVersion = 6.4;
|
||||
TestTargetID = ECEBE1811BA0639500E5B4E3;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = ECE58112181A77090066D073 /* Build configuration list for PBXProject "ipbc-Client" */;
|
||||
buildConfigurationList = ECEBE17D1BA0639500E5B4E3 /* Build configuration list for PBXProject "ipbc-Client" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
@@ -279,115 +192,84 @@
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = ECE5810E181A77090066D073;
|
||||
productRefGroup = ECE58118181A77090066D073 /* Products */;
|
||||
mainGroup = ECEBE1791BA0639500E5B4E3;
|
||||
productRefGroup = ECEBE1831BA0639500E5B4E3 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
ECE58116181A77090066D073 /* ipbc-Client */,
|
||||
ECE58137181A77090066D073 /* ipbc-ClientTests */,
|
||||
ECEBE1811BA0639500E5B4E3 /* ipbc-Client */,
|
||||
ECEBE1911BA0639500E5B4E3 /* ipbc-ClientTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
ECE58115181A77090066D073 /* Resources */ = {
|
||||
ECEBE1801BA0639500E5B4E3 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ECE58125181A77090066D073 /* InfoPlist.strings in Resources */,
|
||||
ECDDC036182D0C7C002B76C1 /* feet.png in Resources */,
|
||||
ECE58133181A77090066D073 /* Images.xcassets in Resources */,
|
||||
ECB963CC18228F42006F370E /* statusbar-icon.png in Resources */,
|
||||
ECE5812B181A77090066D073 /* Credits.rtf in Resources */,
|
||||
ECE58131181A77090066D073 /* MainMenu.xib in Resources */,
|
||||
ECEBE18A1BA0639500E5B4E3 /* Images.xcassets in Resources */,
|
||||
ECEBE1A51BA0690B00E5B4E3 /* MainViewController.xib in Resources */,
|
||||
ECEBE18D1BA0639500E5B4E3 /* MainMenu.xib in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ECE58136181A77090066D073 /* Resources */ = {
|
||||
ECEBE1901BA0639500E5B4E3 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ECE58143181A77090066D073 /* InfoPlist.strings in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
ECE58113181A77090066D073 /* Sources */ = {
|
||||
ECEBE17E1BA0639500E5B4E3 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ECE6FEDA181E8BE4004F6C1F /* WebServiceConstants.m in Sources */,
|
||||
ECE5812E181A77090066D073 /* ipbcAppDelegate.m in Sources */,
|
||||
ECE58127181A77090066D073 /* main.m in Sources */,
|
||||
ECB963D01822943E006F370E /* ImageHelper.m in Sources */,
|
||||
ECE6FED6181E8AFE004F6C1F /* WebserviceClient.m in Sources */,
|
||||
ECB32E3718210D1D00D3C886 /* Reachability.m in Sources */,
|
||||
ECEBE1881BA0639500E5B4E3 /* AppDelegate.swift in Sources */,
|
||||
ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ECE58134181A77090066D073 /* Sources */ = {
|
||||
ECEBE18E1BA0639500E5B4E3 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ECE58145181A77090066D073 /* ipbc_ClientTests.m in Sources */,
|
||||
ECEBE1991BA0639500E5B4E3 /* ipbc_ClientTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
ECE5813D181A77090066D073 /* PBXTargetDependency */ = {
|
||||
ECEBE1941BA0639500E5B4E3 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = ECE58116181A77090066D073 /* ipbc-Client */;
|
||||
targetProxy = ECE5813C181A77090066D073 /* PBXContainerItemProxy */;
|
||||
target = ECEBE1811BA0639500E5B4E3 /* ipbc-Client */;
|
||||
targetProxy = ECEBE1931BA0639500E5B4E3 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
ECE58123181A77090066D073 /* InfoPlist.strings */ = {
|
||||
ECEBE18B1BA0639500E5B4E3 /* MainMenu.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
ECE58124181A77090066D073 /* en */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE58129181A77090066D073 /* Credits.rtf */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
ECE5812A181A77090066D073 /* en */,
|
||||
);
|
||||
name = Credits.rtf;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE5812F181A77090066D073 /* MainMenu.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
ECE58130181A77090066D073 /* Base */,
|
||||
ECEBE18C1BA0639500E5B4E3 /* Base */,
|
||||
);
|
||||
name = MainMenu.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ECE58141181A77090066D073 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
ECE58142181A77090066D073 /* en */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
ECE58146181A77090066D073 /* Debug */ = {
|
||||
ECEBE19A1BA0639500E5B4E3 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
@@ -396,11 +278,15 @@
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
@@ -410,21 +296,24 @@
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
ECE58147181A77090066D073 /* Release */ = {
|
||||
ECEBE19B1BA0639500E5B4E3 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
@@ -433,128 +322,114 @@
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
ECE58149181A77090066D073 /* Debug */ = {
|
||||
ECEBE19D1BA0639500E5B4E3 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = "ipbc-Client/ipbc-Client.entitlements";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "ipbc-Client/ipbc-Client-Prefix.pch";
|
||||
INFOPLIST_FILE = "ipbc-Client/ipbc-Client-Info.plist";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
||||
INFOPLIST_FILE = "ipbc-Client/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE = "";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
ECE5814A181A77090066D073 /* Release */ = {
|
||||
ECEBE19E1BA0639500E5B4E3 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = "ipbc-Client/ipbc-Client.entitlements";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application: Adawim UG (haftungsbeschrankt) (H474U3TZ74)";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "ipbc-Client/ipbc-Client-Prefix.pch";
|
||||
INFOPLIST_FILE = "ipbc-Client/ipbc-Client-Info.plist";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
||||
INFOPLIST_FILE = "ipbc-Client/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE = "";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
ECE5814C181A77090066D073 /* Debug */ = {
|
||||
ECEBE1A01BA0639500E5B4E3 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/ipbc-Client.app/Contents/MacOS/ipbc-Client";
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "ipbc-Client/ipbc-Client-Prefix.pch";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = "ipbc-ClientTests/ipbc-ClientTests-Info.plist";
|
||||
INFOPLIST_FILE = "ipbc-ClientTests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||
WRAPPER_EXTENSION = xctest;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ipbc-Client.app/Contents/MacOS/ipbc-Client";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
ECE5814D181A77090066D073 /* Release */ = {
|
||||
ECEBE1A11BA0639500E5B4E3 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/ipbc-Client.app/Contents/MacOS/ipbc-Client";
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "ipbc-Client/ipbc-Client-Prefix.pch";
|
||||
INFOPLIST_FILE = "ipbc-ClientTests/ipbc-ClientTests-Info.plist";
|
||||
INFOPLIST_FILE = "ipbc-ClientTests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||
WRAPPER_EXTENSION = xctest;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ipbc-Client.app/Contents/MacOS/ipbc-Client";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
ECE58112181A77090066D073 /* Build configuration list for PBXProject "ipbc-Client" */ = {
|
||||
ECEBE17D1BA0639500E5B4E3 /* Build configuration list for PBXProject "ipbc-Client" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
ECE58146181A77090066D073 /* Debug */,
|
||||
ECE58147181A77090066D073 /* Release */,
|
||||
ECEBE19A1BA0639500E5B4E3 /* Debug */,
|
||||
ECEBE19B1BA0639500E5B4E3 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
ECE58148181A77090066D073 /* Build configuration list for PBXNativeTarget "ipbc-Client" */ = {
|
||||
ECEBE19C1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-Client" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
ECE58149181A77090066D073 /* Debug */,
|
||||
ECE5814A181A77090066D073 /* Release */,
|
||||
ECEBE19D1BA0639500E5B4E3 /* Debug */,
|
||||
ECEBE19E1BA0639500E5B4E3 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
ECE5814B181A77090066D073 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */ = {
|
||||
ECEBE19F1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
ECE5814C181A77090066D073 /* Debug */,
|
||||
ECE5814D181A77090066D073 /* Release */,
|
||||
ECEBE1A01BA0639500E5B4E3 /* Debug */,
|
||||
ECEBE1A11BA0639500E5B4E3 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = ECE5810F181A77090066D073 /* Project object */;
|
||||
rootObject = ECEBE17A1BA0639500E5B4E3 /* Project object */;
|
||||
}
|
||||
|
||||
@@ -5,23 +5,23 @@
|
||||
<key>IDESourceControlProjectFavoriteDictionaryKey</key>
|
||||
<false/>
|
||||
<key>IDESourceControlProjectIdentifier</key>
|
||||
<string>BDF122F8-DA02-47B4-AFC7-D6076CC3B9C4</string>
|
||||
<string>B4996E80-3257-4F7C-86EA-7424113FB751</string>
|
||||
<key>IDESourceControlProjectName</key>
|
||||
<string>ipbc-Client</string>
|
||||
<string>project</string>
|
||||
<key>IDESourceControlProjectOriginsDictionary</key>
|
||||
<dict>
|
||||
<key>41A46EC74341898613642098E6535621FD117950</key>
|
||||
<string>ssh://web1.adatewithmusic.com/git/ipbc-statusbarapp.git</string>
|
||||
<string>ssh://services.adawim.com:7999/ipbc/statusbar-app-osx.git</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectPath</key>
|
||||
<string>ipbc-Client/ipbc-Client.xcodeproj</string>
|
||||
<string>ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace</string>
|
||||
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
|
||||
<dict>
|
||||
<key>41A46EC74341898613642098E6535621FD117950</key>
|
||||
<string>../../..</string>
|
||||
</dict>
|
||||
<key>IDESourceControlProjectURL</key>
|
||||
<string>ssh://web1.adatewithmusic.com/git/ipbc-statusbarapp.git</string>
|
||||
<string>ssh://services.adawim.com:7999/ipbc/statusbar-app-osx.git</string>
|
||||
<key>IDESourceControlProjectVersion</key>
|
||||
<integer>111</integer>
|
||||
<key>IDESourceControlProjectWCCIdentifier</key>
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
|
||||
<true/>
|
||||
<key>SnapshotAutomaticallyBeforeSignificantChanges</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0500"
|
||||
LastUpgradeVersion = "0640"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -14,12 +14,26 @@
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "ECE58116181A77090066D073"
|
||||
BlueprintIdentifier = "ECEBE1811BA0639500E5B4E3"
|
||||
BuildableName = "ipbc-Client.app"
|
||||
BlueprintName = "ipbc-Client"
|
||||
ReferencedContainer = "container:ipbc-Client.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "NO"
|
||||
buildForArchiving = "NO"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "ECEBE1911BA0639500E5B4E3"
|
||||
BuildableName = "ipbc-ClientTests.xctest"
|
||||
BlueprintName = "ipbc-ClientTests"
|
||||
ReferencedContainer = "container:ipbc-Client.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
@@ -32,7 +46,7 @@
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "ECE58137181A77090066D073"
|
||||
BlueprintIdentifier = "ECEBE1911BA0639500E5B4E3"
|
||||
BuildableName = "ipbc-ClientTests.xctest"
|
||||
BlueprintName = "ipbc-ClientTests"
|
||||
ReferencedContainer = "container:ipbc-Client.xcodeproj">
|
||||
@@ -42,7 +56,7 @@
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "ECE58116181A77090066D073"
|
||||
BlueprintIdentifier = "ECEBE1811BA0639500E5B4E3"
|
||||
BuildableName = "ipbc-Client.app"
|
||||
BlueprintName = "ipbc-Client"
|
||||
ReferencedContainer = "container:ipbc-Client.xcodeproj">
|
||||
@@ -58,10 +72,11 @@
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "ECE58116181A77090066D073"
|
||||
BlueprintIdentifier = "ECEBE1811BA0639500E5B4E3"
|
||||
BuildableName = "ipbc-Client.app"
|
||||
BlueprintName = "ipbc-Client"
|
||||
ReferencedContainer = "container:ipbc-Client.xcodeproj">
|
||||
@@ -76,10 +91,11 @@
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable>
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "ECE58116181A77090066D073"
|
||||
BlueprintIdentifier = "ECEBE1811BA0639500E5B4E3"
|
||||
BuildableName = "ipbc-Client.app"
|
||||
BlueprintName = "ipbc-Client"
|
||||
ReferencedContainer = "container:ipbc-Client.xcodeproj">
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>ECE58116181A77090066D073</key>
|
||||
<key>ECEBE1811BA0639500E5B4E3</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>ECE58137181A77090066D073</key>
|
||||
<key>ECEBE1911BA0639500E5B4E3</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 09.09.15.
|
||||
// Copyright (c) 2015 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
@NSApplicationMain
|
||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
@IBOutlet weak var window: NSWindow!
|
||||
let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
|
||||
let popover = NSPopover()
|
||||
|
||||
func applicationDidFinishLaunching(aNotification: NSNotification) {
|
||||
// Insert code here to initialize your application
|
||||
|
||||
|
||||
if let button = statusItem.button {
|
||||
button.image = NSImage(named: "statusbar-icon")
|
||||
button.action = Selector("togglePopover:")
|
||||
}
|
||||
|
||||
popover.contentViewController = MainViewController(nibName: "MainViewController", bundle: nil)
|
||||
}
|
||||
|
||||
func applicationWillTerminate(aNotification: NSNotification) {
|
||||
// Insert code here to tear down your application
|
||||
}
|
||||
|
||||
func showPopover(sender: AnyObject?) {
|
||||
if let button = statusItem.button {
|
||||
popover.showRelativeToRect(button.bounds, ofView: button, preferredEdge: NSMinYEdge)
|
||||
}
|
||||
}
|
||||
|
||||
func closePopover(sender: AnyObject?) {
|
||||
popover.performClose(sender)
|
||||
}
|
||||
|
||||
func togglePopover(sender: AnyObject?) {
|
||||
if popover.shown {
|
||||
closePopover(sender)
|
||||
} else {
|
||||
showPopover(sender)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// MainViewController.swift
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 09.09.15.
|
||||
// Copyright (c) 2015 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
class MainViewController: NSViewController {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
// Do view setup here.
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5023" systemVersion="13A603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5023"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="MainViewController" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application"/>
|
||||
<customView id="Hz6-mo-xeY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -1,15 +0,0 @@
|
||||
//
|
||||
// ImageHelper.h
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 31.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface ImageHelper : NSObject
|
||||
|
||||
+(NSImage*)resizeImage:(NSImage*)sourceImage size:(NSSize)size;
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// ImageHelper.m
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 31.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import "ImageHelper.h"
|
||||
|
||||
@implementation ImageHelper
|
||||
|
||||
+(NSImage*)resizeImage:(NSImage*)sourceImage size:(NSSize)size {
|
||||
NSRect targetFrame = NSMakeRect(0, 0, size.width, size.height);
|
||||
NSImage* targetImage = nil;
|
||||
NSImageRep *sourceImageRep =
|
||||
[sourceImage bestRepresentationForRect:targetFrame
|
||||
context:nil
|
||||
hints:nil];
|
||||
|
||||
targetImage = [[NSImage alloc] initWithSize:size];
|
||||
|
||||
[targetImage lockFocus];
|
||||
[sourceImageRep drawInRect: targetFrame];
|
||||
[targetImage unlockFocus];
|
||||
|
||||
return targetImage;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -13,8 +13,9 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "32x32",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon_32x32.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
@@ -48,8 +49,9 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"size" : "512x512",
|
||||
"idiom" : "mac",
|
||||
"filename" : "icon_512x512.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 377 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 377 KiB |
|
Before Width: | Height: | Size: 639 KiB After Width: | Height: | Size: 1.2 MiB |
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "mac"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"filename" : "statusbar-icon.png"
|
||||
},
|
||||
{
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"filename" : "statusbar-icon2x.png"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode",
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
@@ -3,17 +3,17 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>de_DE</string>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.ipbc.client.osx</string>
|
||||
<string>com.ipbc.client.osx.$(PRODUCT_NAME:rfc1034identifier)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
@@ -22,16 +22,14 @@
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
||||
<key>LSUIElement</key>
|
||||
<true/>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2013 Adawim UG (haftungsbeschränkt). All rights reserved.</string>
|
||||
<string>Copyright © 2015 Adawim UG (haftungsbeschränkt). All rights reserved.</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>LSUIElement</key>
|
||||
<true/>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
@@ -1,113 +0,0 @@
|
||||
/*
|
||||
https://github.com/tonymillion/Reachability
|
||||
|
||||
|
||||
|
||||
Copyright (c) 2011, Tony Million.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <SystemConfiguration/SystemConfiguration.h>
|
||||
|
||||
#import <sys/socket.h>
|
||||
#import <netinet/in.h>
|
||||
#import <netinet6/in6.h>
|
||||
#import <arpa/inet.h>
|
||||
#import <ifaddrs.h>
|
||||
#import <netdb.h>
|
||||
|
||||
/**
|
||||
* Does ARC support GCD objects?
|
||||
* It does if the minimum deployment target is iOS 6+ or Mac OS X 8+
|
||||
*
|
||||
* @see http://opensource.apple.com/source/libdispatch/libdispatch-228.18/os/object.h
|
||||
**/
|
||||
#if OS_OBJECT_USE_OBJC
|
||||
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
|
||||
#else
|
||||
#define NEEDS_DISPATCH_RETAIN_RELEASE 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X.
|
||||
*
|
||||
* @see http://nshipster.com/ns_enum-ns_options/
|
||||
**/
|
||||
#ifndef NS_ENUM
|
||||
#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
|
||||
#endif
|
||||
|
||||
extern NSString *const kReachabilityChangedNotification;
|
||||
|
||||
typedef NS_ENUM(NSInteger, NetworkStatus) {
|
||||
// Apple NetworkStatus Compatible Names.
|
||||
NotReachable = 0,
|
||||
ReachableViaWiFi = 2,
|
||||
ReachableViaWWAN = 1
|
||||
};
|
||||
|
||||
@class Reachability;
|
||||
|
||||
typedef void (^NetworkReachable)(Reachability * reachability);
|
||||
typedef void (^NetworkUnreachable)(Reachability * reachability);
|
||||
|
||||
@interface Reachability : NSObject
|
||||
|
||||
@property (nonatomic, copy) NetworkReachable reachableBlock;
|
||||
@property (nonatomic, copy) NetworkUnreachable unreachableBlock;
|
||||
|
||||
|
||||
@property (nonatomic, assign) BOOL reachableOnWWAN;
|
||||
|
||||
+(Reachability*)reachabilityWithHostname:(NSString*)hostname;
|
||||
+(Reachability*)reachabilityForInternetConnection;
|
||||
+(Reachability*)reachabilityWithAddress:(const struct sockaddr_in*)hostAddress;
|
||||
+(Reachability*)reachabilityForLocalWiFi;
|
||||
|
||||
-(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref;
|
||||
|
||||
-(BOOL)startNotifier;
|
||||
-(void)stopNotifier;
|
||||
|
||||
-(BOOL)isReachable;
|
||||
-(BOOL)isReachableViaWWAN;
|
||||
-(BOOL)isReachableViaWiFi;
|
||||
|
||||
// WWAN may be available, but not active until a connection has been established.
|
||||
// WiFi may require a connection for VPN on Demand.
|
||||
-(BOOL)isConnectionRequired; // Identical DDG variant.
|
||||
-(BOOL)connectionRequired; // Apple's routine.
|
||||
// Dynamic, on demand connection?
|
||||
-(BOOL)isConnectionOnDemand;
|
||||
// Is user intervention required?
|
||||
-(BOOL)isInterventionRequired;
|
||||
|
||||
-(NetworkStatus)currentReachabilityStatus;
|
||||
-(SCNetworkReachabilityFlags)reachabilityFlags;
|
||||
-(NSString*)currentReachabilityString;
|
||||
-(NSString*)currentReachabilityFlags;
|
||||
|
||||
@end
|
||||
@@ -1,531 +0,0 @@
|
||||
/*
|
||||
https://github.com/tonymillion/Reachability
|
||||
|
||||
|
||||
|
||||
Copyright (c) 2011, Tony Million.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#import "Reachability.h"
|
||||
|
||||
|
||||
NSString *const kReachabilityChangedNotification = @"kReachabilityChangedNotification";
|
||||
|
||||
@interface Reachability ()
|
||||
|
||||
@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef;
|
||||
|
||||
|
||||
#if NEEDS_DISPATCH_RETAIN_RELEASE
|
||||
@property (nonatomic, assign) dispatch_queue_t reachabilitySerialQueue;
|
||||
#else
|
||||
@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue;
|
||||
#endif
|
||||
|
||||
|
||||
@property (nonatomic, strong) id reachabilityObject;
|
||||
|
||||
-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags;
|
||||
-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags;
|
||||
|
||||
@end
|
||||
|
||||
static NSString *reachabilityFlags(SCNetworkReachabilityFlags flags)
|
||||
{
|
||||
return [NSString stringWithFormat:@"%c%c %c%c%c%c%c%c%c",
|
||||
#if TARGET_OS_IPHONE
|
||||
(flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-',
|
||||
#else
|
||||
'X',
|
||||
#endif
|
||||
(flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-',
|
||||
(flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-'];
|
||||
}
|
||||
|
||||
// Start listening for reachability notifications on the current run loop
|
||||
static void TMReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info)
|
||||
{
|
||||
#pragma unused (target)
|
||||
#if __has_feature(objc_arc)
|
||||
Reachability *reachability = ((__bridge Reachability*)info);
|
||||
#else
|
||||
Reachability *reachability = ((Reachability*)info);
|
||||
#endif
|
||||
|
||||
// We probably don't need an autoreleasepool here, as GCD docs state each queue has its own autorelease pool,
|
||||
// but what the heck eh?
|
||||
@autoreleasepool
|
||||
{
|
||||
[reachability reachabilityChanged:flags];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@implementation Reachability
|
||||
|
||||
@synthesize reachabilityRef;
|
||||
@synthesize reachabilitySerialQueue;
|
||||
|
||||
@synthesize reachableOnWWAN;
|
||||
|
||||
@synthesize reachableBlock;
|
||||
@synthesize unreachableBlock;
|
||||
|
||||
@synthesize reachabilityObject;
|
||||
|
||||
#pragma mark - Class Constructor Methods
|
||||
|
||||
+(Reachability*)reachabilityWithHostName:(NSString*)hostname
|
||||
{
|
||||
return [Reachability reachabilityWithHostname:hostname];
|
||||
}
|
||||
|
||||
+(Reachability*)reachabilityWithHostname:(NSString*)hostname
|
||||
{
|
||||
SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]);
|
||||
if (ref)
|
||||
{
|
||||
id reachability = [[self alloc] initWithReachabilityRef:ref];
|
||||
|
||||
#if __has_feature(objc_arc)
|
||||
return reachability;
|
||||
#else
|
||||
return [reachability autorelease];
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
+(Reachability *)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress
|
||||
{
|
||||
SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress);
|
||||
if (ref)
|
||||
{
|
||||
id reachability = [[self alloc] initWithReachabilityRef:ref];
|
||||
|
||||
#if __has_feature(objc_arc)
|
||||
return reachability;
|
||||
#else
|
||||
return [reachability autorelease];
|
||||
#endif
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
+(Reachability *)reachabilityForInternetConnection
|
||||
{
|
||||
struct sockaddr_in zeroAddress;
|
||||
bzero(&zeroAddress, sizeof(zeroAddress));
|
||||
zeroAddress.sin_len = sizeof(zeroAddress);
|
||||
zeroAddress.sin_family = AF_INET;
|
||||
|
||||
return [self reachabilityWithAddress:&zeroAddress];
|
||||
}
|
||||
|
||||
+(Reachability*)reachabilityForLocalWiFi
|
||||
{
|
||||
struct sockaddr_in localWifiAddress;
|
||||
bzero(&localWifiAddress, sizeof(localWifiAddress));
|
||||
localWifiAddress.sin_len = sizeof(localWifiAddress);
|
||||
localWifiAddress.sin_family = AF_INET;
|
||||
// IN_LINKLOCALNETNUM is defined in <netinet/in.h> as 169.254.0.0
|
||||
localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM);
|
||||
|
||||
return [self reachabilityWithAddress:&localWifiAddress];
|
||||
}
|
||||
|
||||
|
||||
// Initialization methods
|
||||
|
||||
-(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref
|
||||
{
|
||||
self = [super init];
|
||||
if (self != nil)
|
||||
{
|
||||
self.reachableOnWWAN = YES;
|
||||
self.reachabilityRef = ref;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
[self stopNotifier];
|
||||
|
||||
if(self.reachabilityRef)
|
||||
{
|
||||
CFRelease(self.reachabilityRef);
|
||||
self.reachabilityRef = nil;
|
||||
}
|
||||
|
||||
self.reachableBlock = nil;
|
||||
self.unreachableBlock = nil;
|
||||
|
||||
#if !(__has_feature(objc_arc))
|
||||
[super dealloc];
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - Notifier Methods
|
||||
|
||||
// Notifier
|
||||
// NOTE: This uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD
|
||||
// - In other words DO NOT DO ANY UI UPDATES IN THE BLOCKS.
|
||||
// INSTEAD USE dispatch_async(dispatch_get_main_queue(), ^{UISTUFF}) (or dispatch_sync if you want)
|
||||
|
||||
-(BOOL)startNotifier
|
||||
{
|
||||
SCNetworkReachabilityContext context = { 0, NULL, NULL, NULL, NULL };
|
||||
|
||||
// this should do a retain on ourself, so as long as we're in notifier mode we shouldn't disappear out from under ourselves
|
||||
// woah
|
||||
self.reachabilityObject = self;
|
||||
|
||||
|
||||
|
||||
// First, we need to create a serial queue.
|
||||
// We allocate this once for the lifetime of the notifier.
|
||||
self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL);
|
||||
if(!self.reachabilitySerialQueue)
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
#if __has_feature(objc_arc)
|
||||
context.info = (__bridge void *)self;
|
||||
#else
|
||||
context.info = (void *)self;
|
||||
#endif
|
||||
|
||||
if (!SCNetworkReachabilitySetCallback(self.reachabilityRef, TMReachabilityCallback, &context))
|
||||
{
|
||||
#ifdef DEBUG
|
||||
NSLog(@"SCNetworkReachabilitySetCallback() failed: %s", SCErrorString(SCError()));
|
||||
#endif
|
||||
|
||||
// Clear out the dispatch queue
|
||||
if(self.reachabilitySerialQueue)
|
||||
{
|
||||
#if NEEDS_DISPATCH_RETAIN_RELEASE
|
||||
dispatch_release(self.reachabilitySerialQueue);
|
||||
#endif
|
||||
self.reachabilitySerialQueue = nil;
|
||||
}
|
||||
|
||||
self.reachabilityObject = nil;
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Set it as our reachability queue, which will retain the queue
|
||||
if(!SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue))
|
||||
{
|
||||
#ifdef DEBUG
|
||||
NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError()));
|
||||
#endif
|
||||
|
||||
// UH OH - FAILURE!
|
||||
|
||||
// First stop, any callbacks!
|
||||
SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL);
|
||||
|
||||
// Then clear out the dispatch queue.
|
||||
if(self.reachabilitySerialQueue)
|
||||
{
|
||||
#if NEEDS_DISPATCH_RETAIN_RELEASE
|
||||
dispatch_release(self.reachabilitySerialQueue);
|
||||
#endif
|
||||
self.reachabilitySerialQueue = nil;
|
||||
}
|
||||
|
||||
self.reachabilityObject = nil;
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void)stopNotifier
|
||||
{
|
||||
// First stop, any callbacks!
|
||||
SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL);
|
||||
|
||||
// Unregister target from the GCD serial dispatch queue.
|
||||
SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL);
|
||||
|
||||
if(self.reachabilitySerialQueue)
|
||||
{
|
||||
#if NEEDS_DISPATCH_RETAIN_RELEASE
|
||||
dispatch_release(self.reachabilitySerialQueue);
|
||||
#endif
|
||||
self.reachabilitySerialQueue = nil;
|
||||
}
|
||||
|
||||
self.reachabilityObject = nil;
|
||||
}
|
||||
|
||||
#pragma mark - reachability tests
|
||||
|
||||
// This is for the case where you flick the airplane mode;
|
||||
// you end up getting something like this:
|
||||
//Reachability: WR ct-----
|
||||
//Reachability: -- -------
|
||||
//Reachability: WR ct-----
|
||||
//Reachability: -- -------
|
||||
// We treat this as 4 UNREACHABLE triggers - really apple should do better than this
|
||||
|
||||
#define testcase (kSCNetworkReachabilityFlagsConnectionRequired | kSCNetworkReachabilityFlagsTransientConnection)
|
||||
|
||||
-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags
|
||||
{
|
||||
BOOL connectionUP = YES;
|
||||
|
||||
if(!(flags & kSCNetworkReachabilityFlagsReachable))
|
||||
connectionUP = NO;
|
||||
|
||||
if( (flags & testcase) == testcase )
|
||||
connectionUP = NO;
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
if(flags & kSCNetworkReachabilityFlagsIsWWAN)
|
||||
{
|
||||
// We're on 3G.
|
||||
if(!self.reachableOnWWAN)
|
||||
{
|
||||
// We don't want to connect when on 3G.
|
||||
connectionUP = NO;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return connectionUP;
|
||||
}
|
||||
|
||||
-(BOOL)isReachable
|
||||
{
|
||||
SCNetworkReachabilityFlags flags;
|
||||
|
||||
if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags))
|
||||
return NO;
|
||||
|
||||
return [self isReachableWithFlags:flags];
|
||||
}
|
||||
|
||||
-(BOOL)isReachableViaWWAN
|
||||
{
|
||||
#if TARGET_OS_IPHONE
|
||||
|
||||
SCNetworkReachabilityFlags flags = 0;
|
||||
|
||||
if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
|
||||
{
|
||||
// Check we're REACHABLE
|
||||
if(flags & kSCNetworkReachabilityFlagsReachable)
|
||||
{
|
||||
// Now, check we're on WWAN
|
||||
if(flags & kSCNetworkReachabilityFlagsIsWWAN)
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
-(BOOL)isReachableViaWiFi
|
||||
{
|
||||
SCNetworkReachabilityFlags flags = 0;
|
||||
|
||||
if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
|
||||
{
|
||||
// Check we're reachable
|
||||
if((flags & kSCNetworkReachabilityFlagsReachable))
|
||||
{
|
||||
#if TARGET_OS_IPHONE
|
||||
// Check we're NOT on WWAN
|
||||
if((flags & kSCNetworkReachabilityFlagsIsWWAN))
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
#endif
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
// WWAN may be available, but not active until a connection has been established.
|
||||
// WiFi may require a connection for VPN on Demand.
|
||||
-(BOOL)isConnectionRequired
|
||||
{
|
||||
return [self connectionRequired];
|
||||
}
|
||||
|
||||
-(BOOL)connectionRequired
|
||||
{
|
||||
SCNetworkReachabilityFlags flags;
|
||||
|
||||
if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
|
||||
{
|
||||
return (flags & kSCNetworkReachabilityFlagsConnectionRequired);
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Dynamic, on demand connection?
|
||||
-(BOOL)isConnectionOnDemand
|
||||
{
|
||||
SCNetworkReachabilityFlags flags;
|
||||
|
||||
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
|
||||
{
|
||||
return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) &&
|
||||
(flags & (kSCNetworkReachabilityFlagsConnectionOnTraffic | kSCNetworkReachabilityFlagsConnectionOnDemand)));
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Is user intervention required?
|
||||
-(BOOL)isInterventionRequired
|
||||
{
|
||||
SCNetworkReachabilityFlags flags;
|
||||
|
||||
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
|
||||
{
|
||||
return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) &&
|
||||
(flags & kSCNetworkReachabilityFlagsInterventionRequired));
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - reachability status stuff
|
||||
|
||||
-(NetworkStatus)currentReachabilityStatus
|
||||
{
|
||||
if([self isReachable])
|
||||
{
|
||||
if([self isReachableViaWiFi])
|
||||
return ReachableViaWiFi;
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
return ReachableViaWWAN;
|
||||
#endif
|
||||
}
|
||||
|
||||
return NotReachable;
|
||||
}
|
||||
|
||||
-(SCNetworkReachabilityFlags)reachabilityFlags
|
||||
{
|
||||
SCNetworkReachabilityFlags flags = 0;
|
||||
|
||||
if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
|
||||
{
|
||||
return flags;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
-(NSString*)currentReachabilityString
|
||||
{
|
||||
NetworkStatus temp = [self currentReachabilityStatus];
|
||||
|
||||
if(temp == reachableOnWWAN)
|
||||
{
|
||||
// Updated for the fact that we have CDMA phones now!
|
||||
return NSLocalizedString(@"Cellular", @"");
|
||||
}
|
||||
if (temp == ReachableViaWiFi)
|
||||
{
|
||||
return NSLocalizedString(@"WiFi", @"");
|
||||
}
|
||||
|
||||
return NSLocalizedString(@"No Connection", @"");
|
||||
}
|
||||
|
||||
-(NSString*)currentReachabilityFlags
|
||||
{
|
||||
return reachabilityFlags([self reachabilityFlags]);
|
||||
}
|
||||
|
||||
#pragma mark - Callback function calls this method
|
||||
|
||||
-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags
|
||||
{
|
||||
if([self isReachableWithFlags:flags])
|
||||
{
|
||||
if(self.reachableBlock)
|
||||
{
|
||||
self.reachableBlock(self);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(self.unreachableBlock)
|
||||
{
|
||||
self.unreachableBlock(self);
|
||||
}
|
||||
}
|
||||
|
||||
// this makes sure the change notification happens on the MAIN THREAD
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification
|
||||
object:self];
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark - Debug Description
|
||||
|
||||
- (NSString *) description
|
||||
{
|
||||
NSString *description = [NSString stringWithFormat:@"<%@: %#x>",
|
||||
NSStringFromClass([self class]), (unsigned int) self];
|
||||
return description;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,19 +0,0 @@
|
||||
//
|
||||
// WebServiceConstants.h
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 28.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface WebServiceConstants : NSObject
|
||||
|
||||
extern NSString * const HOMEPAGE_REGISTER;
|
||||
|
||||
extern NSString * const WS_BASE;
|
||||
extern NSString * const WS_RESOURCE;
|
||||
extern NSString * const WS_GET_USERS_IP_SERVICE;
|
||||
|
||||
@end
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// WebServiceConstants.m
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 28.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import "WebServiceConstants.h"
|
||||
|
||||
@implementation WebServiceConstants
|
||||
|
||||
NSString * const HOMEPAGE_REGISTER = @"https://www.ip-bc.org/login.xhtml";
|
||||
|
||||
/*
|
||||
NSString * const WS_BASE = @"localhost:8080/ip-bc.org";
|
||||
NSString * const WS_RESOURCE = @"http://localhost:8080/ip-bc.org/ws/update/ip";
|
||||
NSString * const WS_GET_USERS_IP_SERVICE = @"http://localhost:8080/ip-bc.org/ws/info/ip";
|
||||
*/
|
||||
|
||||
NSString * const WS_BASE = @"www.ip-bc.org";
|
||||
NSString * const WS_RESOURCE = @"https://www.ip-bc.org/ws/update/ip";
|
||||
NSString * const WS_GET_USERS_IP_SERVICE = @"https://www.ip-bc.org/ws/info/ip";
|
||||
|
||||
@end
|
||||
@@ -1,22 +0,0 @@
|
||||
//
|
||||
// WebserviceClient.h
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 28.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface WebserviceClient : NSObject {
|
||||
|
||||
NSTimer *updateTimer;
|
||||
NSString *usersIPv4;
|
||||
BOOL isNetworkAvailable;
|
||||
BOOL isRequestRunning;
|
||||
}
|
||||
|
||||
-(BOOL)updateDomain;
|
||||
-(void)checkNetworkAvailability;
|
||||
|
||||
@end
|
||||
@@ -1,151 +0,0 @@
|
||||
//
|
||||
// WebserviceClient.m
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 28.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import "WebserviceClient.h"
|
||||
#import "WebServiceConstants.h"
|
||||
#import "Reachability.h"
|
||||
|
||||
@implementation WebserviceClient
|
||||
|
||||
-(void)awakeFromNib {
|
||||
updateTimer = [NSTimer scheduledTimerWithTimeInterval: 4
|
||||
target: self
|
||||
selector: @selector(tick:)
|
||||
userInfo: nil
|
||||
repeats: YES];
|
||||
|
||||
isRequestRunning = NO;
|
||||
|
||||
isNetworkAvailable = NO;
|
||||
[self checkNetworkAvailability];
|
||||
}
|
||||
|
||||
- (void)tick:(NSTimer *)theTimer {
|
||||
if(isNetworkAvailable && !isRequestRunning) {
|
||||
[self updateDomain];
|
||||
} else {
|
||||
// else for logging only
|
||||
|
||||
if(!isNetworkAvailable) {
|
||||
NSLog(@"no ip update, 'cause network unavailable");
|
||||
}
|
||||
if(isRequestRunning) {
|
||||
NSLog(@"no ip update, 'cause of active request");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(BOOL)updateDomain {
|
||||
usersIPv4 = [self fetchIPv4];
|
||||
NSString *storedIPv4 = [[NSUserDefaults standardUserDefaults] stringForKey:@"value.ip.ipv4"];
|
||||
if(storedIPv4 == nil) {
|
||||
[[NSUserDefaults standardUserDefaults] setObject:usersIPv4 forKey:@"value.ip.ipv4"];
|
||||
}
|
||||
|
||||
BOOL updateResult = NO;
|
||||
|
||||
if([self checkUpdateNeeded]) {
|
||||
NSLog(@"update resource: %@", WS_RESOURCE);
|
||||
updateResult = [self doWebServiceUpdate];
|
||||
} else {
|
||||
NSLog(@"no update needed");
|
||||
}
|
||||
|
||||
return updateResult;
|
||||
}
|
||||
|
||||
-(void)checkNetworkAvailability {
|
||||
// Allocate a reachability object
|
||||
Reachability* reach = [Reachability reachabilityWithHostname:WS_BASE];
|
||||
|
||||
// Set the blocks
|
||||
reach.reachableBlock = ^(Reachability*reach)
|
||||
{
|
||||
NSLog(@"%@ REACHABLE", WS_BASE);
|
||||
isNetworkAvailable = YES;
|
||||
};
|
||||
|
||||
reach.unreachableBlock = ^(Reachability*reach)
|
||||
{
|
||||
NSLog(@"%@ UNREACHABLE", WS_BASE);
|
||||
isNetworkAvailable = NO;
|
||||
};
|
||||
|
||||
// Start the notifier, which will cause the reachability object to retain itself!
|
||||
[reach startNotifier];
|
||||
}
|
||||
|
||||
-(BOOL)checkUpdateNeeded {
|
||||
NSString *storedIPv4 = [[NSUserDefaults standardUserDefaults] stringForKey:@"value.ip.ipv4"];
|
||||
NSString *fetchedIPv4 = usersIPv4;
|
||||
//return YES;
|
||||
if(storedIPv4 == nil) {
|
||||
NSLog(@"stored IPv4 NULL");
|
||||
return YES;
|
||||
} else if(fetchedIPv4 == nil) {
|
||||
NSLog(@"fetched IPv4 NULL");
|
||||
return NO;
|
||||
} else {
|
||||
BOOL changed = ![storedIPv4 isEqualToString:fetchedIPv4];
|
||||
NSLog(@"compare stored %@ with %@. Changed: %@", storedIPv4, fetchedIPv4, (changed ? @"yes" : @"no"));
|
||||
return changed;
|
||||
}
|
||||
}
|
||||
|
||||
-(BOOL)doWebServiceUpdate {
|
||||
isRequestRunning = YES;
|
||||
|
||||
NSString *settingTempName = [[NSUserDefaults standardUserDefaults] stringForKey:@"setting.name"];
|
||||
NSString *settingTempToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"setting.token"];
|
||||
|
||||
if([settingTempName length] > 0 && [settingTempToken length] > 0) {
|
||||
NSLog(@"update ip to %@", usersIPv4);
|
||||
|
||||
NSURL *url = [NSURL URLWithString:WS_RESOURCE];
|
||||
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
|
||||
[request setHTTPMethod:@"POST"];
|
||||
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
||||
|
||||
NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||
settingTempName, @"domain",
|
||||
settingTempToken, @"token",
|
||||
nil];
|
||||
NSError *error;
|
||||
NSData *postData = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error];
|
||||
[request setHTTPBody:postData];
|
||||
|
||||
/*NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
|
||||
NSString *strData = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
|
||||
NSLog(@"resultData: %@", strData);*/
|
||||
|
||||
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *resultData, NSError *error) {
|
||||
NSString *strData = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
|
||||
NSLog(@"resultData: %@", strData);
|
||||
|
||||
// locally save posted ip
|
||||
[[NSUserDefaults standardUserDefaults] setObject:usersIPv4 forKey:@"value.ip.ipv4"];
|
||||
|
||||
isRequestRunning = NO;
|
||||
}];
|
||||
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
-(NSString *)fetchIPv4 {
|
||||
NSURL *myIpAdress = [NSURL URLWithString:WS_GET_USERS_IP_SERVICE];
|
||||
NSString *contentOfURL = [NSString stringWithContentsOfURL:myIpAdress encoding:NSUTF8StringEncoding error:NULL];
|
||||
NSString *contentTrimmed = [contentOfURL stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
||||
|
||||
//NSLog(@"fetched IPv4: %@", contentTrimmed);
|
||||
return contentTrimmed;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,29 +0,0 @@
|
||||
{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\paperw9840\paperh8400
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
|
||||
|
||||
\f0\b\fs24 \cf0 Engineering:
|
||||
\b0 \
|
||||
Some people\
|
||||
\
|
||||
|
||||
\b Human Interface Design:
|
||||
\b0 \
|
||||
Some other people\
|
||||
\
|
||||
|
||||
\b Testing:
|
||||
\b0 \
|
||||
Hopefully not nobody\
|
||||
\
|
||||
|
||||
\b Documentation:
|
||||
\b0 \
|
||||
Whoever\
|
||||
\
|
||||
|
||||
\b With special thanks to:
|
||||
\b0 \
|
||||
Mom\
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Localized versions of Info.plist keys */
|
||||
|
||||
|
Before Width: | Height: | Size: 668 KiB |
@@ -1,9 +0,0 @@
|
||||
//
|
||||
// Prefix header
|
||||
//
|
||||
// The contents of this file are implicitly included at the beginning of every source file.
|
||||
//
|
||||
|
||||
#ifdef __OBJC__
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#endif
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,32 +0,0 @@
|
||||
//
|
||||
// ipbcAppDelegate.h
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 25.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface ipbcAppDelegate : NSObject <NSApplicationDelegate> {
|
||||
NSWindow *window;
|
||||
IBOutlet NSWindow *settings;
|
||||
IBOutlet NSMenu *statusMenu;
|
||||
NSStatusItem * statusItem;
|
||||
|
||||
/* settings */
|
||||
IBOutlet NSTextField *settingName;
|
||||
IBOutlet NSTextField *settingToken;
|
||||
}
|
||||
|
||||
@property (assign) IBOutlet NSWindow *window;
|
||||
|
||||
-(IBAction)fromMenuSettings:(id)sender;
|
||||
-(IBAction)fromMenuQuit:(id)sender;
|
||||
|
||||
-(IBAction)fromSettingsCancel:(id)sender;
|
||||
-(IBAction)fromSettingsSave:(id)sender;
|
||||
|
||||
-(IBAction)gotoHomepage:(id)sender;
|
||||
|
||||
@end
|
||||
@@ -1,64 +0,0 @@
|
||||
//
|
||||
// ipbcAppDelegate.m
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 25.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import "ipbcAppDelegate.h"
|
||||
#import "ImageHelper.h"
|
||||
#import "WebServiceConstants.h"
|
||||
|
||||
@implementation ipbcAppDelegate
|
||||
|
||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
|
||||
// Insert code here to initialize your application
|
||||
|
||||
NSString *settingTempName = [[NSUserDefaults standardUserDefaults] stringForKey:@"setting.name"];
|
||||
NSString *settingTempToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"setting.token"];
|
||||
|
||||
[settingName setStringValue:(settingTempName != nil ? settingTempName : @"")];
|
||||
[settingToken setStringValue:(settingTempToken != nil ? settingTempToken : @"")];
|
||||
}
|
||||
|
||||
-(void)awakeFromNib {
|
||||
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
|
||||
[statusItem setMenu:statusMenu];
|
||||
[statusItem setHighlightMode:YES];
|
||||
|
||||
// statusbar icon
|
||||
NSSize statusbarIconSize;
|
||||
statusbarIconSize.width = 18;
|
||||
statusbarIconSize.height = 18;
|
||||
[statusItem setImage:[ImageHelper resizeImage:[NSImage imageNamed: @"statusbar-icon.png"] size:statusbarIconSize]];
|
||||
}
|
||||
|
||||
-(IBAction)fromMenuSettings:(id)sender {
|
||||
[settings makeKeyAndOrderFront:nil];
|
||||
}
|
||||
|
||||
-(IBAction)fromMenuQuit:(id)sender {
|
||||
[NSApp terminate:self];
|
||||
}
|
||||
|
||||
-(IBAction)fromSettingsSave:(id)sender {
|
||||
NSUserDefaults *defauls = [NSUserDefaults standardUserDefaults];
|
||||
[defauls setObject:[settingName stringValue] forKey:@"setting.name"];
|
||||
[defauls setObject:[settingToken stringValue] forKey:@"setting.token"];
|
||||
|
||||
// ip reset
|
||||
[defauls setObject:@"0.0.0.0" forKey:@"value.ip.ipv4"];
|
||||
|
||||
[settings orderOut:self];
|
||||
}
|
||||
|
||||
-(IBAction)fromSettingsCancel:(id)sender {
|
||||
[settings orderOut:self];
|
||||
}
|
||||
|
||||
-(IBAction)gotoHomepage:(id)sender {
|
||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:HOMEPAGE_REGISTER]];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,14 +0,0 @@
|
||||
//
|
||||
// main.m
|
||||
// ipbc-Client
|
||||
//
|
||||
// Created by Gerrit Linnemann on 25.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
int main(int argc, const char * argv[])
|
||||
{
|
||||
return NSApplicationMain(argc, argv);
|
||||
}
|
||||
|
Before Width: | Height: | Size: 18 KiB |
@@ -5,11 +5,13 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.adawim.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||
<string>com.ipbc.client.osx.$(PRODUCT_NAME:rfc1034identifier)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Localized versions of Info.plist keys */
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
//
|
||||
// ipbc_ClientTests.m
|
||||
// ipbc-ClientTests
|
||||
//
|
||||
// Created by Gerrit Linnemann on 25.10.13.
|
||||
// Copyright (c) 2013 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
@interface ipbc_ClientTests : XCTestCase
|
||||
|
||||
@end
|
||||
|
||||
@implementation ipbc_ClientTests
|
||||
|
||||
- (void)setUp
|
||||
{
|
||||
[super setUp];
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
- (void)tearDown
|
||||
{
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
[super tearDown];
|
||||
}
|
||||
|
||||
- (void)testExample
|
||||
{
|
||||
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// ipbc_ClientTests.swift
|
||||
// ipbc-ClientTests
|
||||
//
|
||||
// Created by Gerrit Linnemann on 09.09.15.
|
||||
// Copyright (c) 2015 Adawim UG (haftungsbeschränkt). All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
import XCTest
|
||||
|
||||
class ipbc_ClientTests: XCTestCase {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
func testExample() {
|
||||
// This is an example of a functional test case.
|
||||
XCTAssert(true, "Pass")
|
||||
}
|
||||
|
||||
func testPerformanceExample() {
|
||||
// This is an example of a performance test case.
|
||||
self.measureBlock() {
|
||||
// Put the code you want to measure the time of here.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||