Commit e12b74c7 authored by Fabio Pelosin's avatar Fabio Pelosin

Integrations tests part 2

parent 109af82e
......@@ -17,6 +17,7 @@ group :debugging do
gem "kicker", :git => "https://github.com/alloy/kicker.git", :branch => "3.0.0"
gem "awesome_print"
gem "pry"
gem "diffy"
end
group :documentation do
......
......@@ -41,6 +41,7 @@ GEM
coderay (1.0.8)
colored (1.2)
crack (0.3.2)
diffy (2.1.3)
escape (0.0.4)
faraday (0.8.4)
multipart-post (~> 1.1)
......@@ -90,6 +91,7 @@ DEPENDENCIES
awesome_print
bacon
cocoapods!
diffy
github-markup
kicker!
mocha (~> 0.11.4)
......
platform :ios, '6.0'
pod "Reachability", "3.1.0"
PODS:
- Reachability (3.1.0)
DEPENDENCIES:
- Reachability (= 3.1.0)
SPEC CHECKSUMS:
Reachability: 1c8584c5f26fa776695efef95caaa50402c94cfb
COCOAPODS: 0.16.2
../../Reachability/Reachability.h
\ No newline at end of file
../../Reachability/Reachability.h
\ No newline at end of file
# Acknowledgements
This application makes use of the following third party libraries:
## 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.
Generated by CocoaPods - http://cocoapods.org
<?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>PreferenceSpecifiers</key>
<array>
<dict>
<key>FooterText</key>
<string>This application makes use of the following third party libraries:</string>
<key>Title</key>
<string>Acknowledgements</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>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.
</string>
<key>Title</key>
<string>Reachability</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Generated by CocoaPods - http://cocoapods.org</string>
<key>Title</key>
<string></string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
</array>
<key>StringsTable</key>
<string>Acknowledgements</string>
<key>Title</key>
<string>Acknowledgements</string>
</dict>
</plist>
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#endif
#!/bin/sh
install_resource()
{
case $1 in
*.storyboard)
echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
;;
*.xib)
echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
;;
*.framework)
echo "rsync -rp ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
rsync -rp "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
;;
*)
echo "cp -R ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
cp -R "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
;;
esac
}
ALWAYS_SEARCH_USER_PATHS = YES
HEADER_SEARCH_PATHS = ${PODS_HEADERS_SEARCH_PATHS}
OTHER_LDFLAGS = -ObjC -framework SystemConfiguration
PODS_BUILD_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Reachability"
PODS_HEADERS_SEARCH_PATHS = ${PODS_PUBLIC_HEADERS_SEARCH_PATHS}
PODS_PUBLIC_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Reachability"
PODS_ROOT = ${SRCROOT}/Pods
\ No newline at end of file
<?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>archiveVersion</key>
<string>1</string>
<key>classes</key>
<dict/>
<key>objectVersion</key>
<string>46</string>
<key>objects</key>
<dict>
<key>00DD1010F5394BEE81356529</key>
<dict>
<key>buildConfigurationList</key>
<string>1BBA212443F44EEEAAA66FB4</string>
<key>buildPhases</key>
<array>
<string>65481547B93A41FE976F2C13</string>
<string>AF08B32879FA47258A68C90A</string>
<string>BEB9361C2DAA45E6A56EF811</string>
</array>
<key>buildRules</key>
<array/>
<key>dependencies</key>
<array/>
<key>isa</key>
<string>PBXNativeTarget</string>
<key>name</key>
<string>Pods</string>
<key>productName</key>
<string>Pods</string>
<key>productReference</key>
<string>EC29F5F6CFD84982A041AAB9</string>
<key>productType</key>
<string>com.apple.product-type.library.static</string>
</dict>
<key>127860E82AB2415994BF2184</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>text.xcconfig</string>
<key>name</key>
<string>Pods.xcconfig</string>
<key>path</key>
<string>Pods.xcconfig</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
<key>1B2307C3A3C5404DAD0E56BE</key>
<dict>
<key>children</key>
<array>
<string>A6D1B279E4B642BDB2DC13A9</string>
<string>8FA7EF4ED8E345469F206120</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Reachability</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>1BBA212443F44EEEAAA66FB4</key>
<dict>
<key>buildConfigurations</key>
<array>
<string>45972BDA680B4FAFBCD975D4</string>
<string>CBC7333C7477479EBD3F2D4C</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
<key>defaultConfigurationName</key>
<string>Release</string>
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
<key>2A4E667ADC4E472993861E35</key>
<dict>
<key>fileRef</key>
<string>B914A59A880A40B986D10310</string>
<key>isa</key>
<string>PBXBuildFile</string>
<key>settings</key>
<dict/>
</dict>
<key>2DCCB1EC59E74E46811EDF17</key>
<dict>
<key>children</key>
<array>
<string>1B2307C3A3C5404DAD0E56BE</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Pods</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>45972BDA680B4FAFBCD975D4</key>
<dict>
<key>baseConfigurationReference</key>
<string>127860E82AB2415994BF2184</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
<key>ARCHS</key>
<string>$(ARCHS_STANDARD_32_BIT)</string>
<key>COPY_PHASE_STRIP</key>
<string>YES</string>
<key>DSTROOT</key>
<string>/tmp/xcodeproj.dst</string>
<key>GCC_C_LANGUAGE_STANDARD</key>
<string>gnu99</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
<key>GCC_PREFIX_HEADER</key>
<string>Pods-prefix.pch</string>
<key>GCC_VERSION</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>GCC_WARN_INHIBIT_ALL_WARNINGS</key>
<string>NO</string>
<key>INSTALL_PATH</key>
<string>$(BUILT_PRODUCTS_DIR)</string>
<key>IPHONEOS_DEPLOYMENT_TARGET</key>
<string>6.0</string>
<key>OTHER_LDFLAGS</key>
<string></string>
<key>PODS_HEADERS_SEARCH_PATHS</key>
<string>${PODS_BUILD_HEADERS_SEARCH_PATHS}</string>
<key>PODS_ROOT</key>
<string>${SRCROOT}</string>
<key>PRODUCT_NAME</key>
<string>$(TARGET_NAME)</string>
<key>PUBLIC_HEADERS_FOLDER_PATH</key>
<string>$(TARGET_NAME)</string>
<key>SDKROOT</key>
<string>iphoneos</string>
<key>SKIP_INSTALL</key>
<string>YES</string>
<key>VALIDATE_PRODUCT</key>
<string>YES</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Release</string>
</dict>
<key>5D69D9FCD15240F7B515DEF6</key>
<dict>
<key>children</key>
<array>
<string>EC29F5F6CFD84982A041AAB9</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Products</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>5F51CD6A6E8A4C93A3F2D543</key>
<dict>
<key>buildConfigurations</key>
<array>
<string>E13FBFA044E34F7FB7953B54</string>
<string>97E49F178121406DAB1891DB</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
<key>defaultConfigurationName</key>
<string>Release</string>
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
<key>65481547B93A41FE976F2C13</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
<string>91867938D6264D9DBB1DF6C8</string>
<string>AD527E8190E44ACC9A90A95C</string>
</array>
<key>isa</key>
<string>PBXSourcesBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
<key>654E702666E745889FF3235F</key>
<dict>
<key>fileRef</key>
<string>A6D1B279E4B642BDB2DC13A9</string>
<key>isa</key>
<string>PBXBuildFile</string>
<key>settings</key>
<dict/>
</dict>
<key>798D2EC3C86948708A19A411</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>name</key>
<string>Pods-resources.sh</string>
<key>path</key>
<string>Pods-resources.sh</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
<key>818B879319C3459E8F602FD0</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>name</key>
<string>Pods-prefix.pch</string>
<key>path</key>
<string>Pods-prefix.pch</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
<key>85B947A905E04A3CA5EFD29E</key>
<dict>
<key>children</key>
<array>
<string>798D2EC3C86948708A19A411</string>
<string>818B879319C3459E8F602FD0</string>
<string>127860E82AB2415994BF2184</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Pods</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>8FA7EF4ED8E345469F206120</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
<key>name</key>
<string>Reachability.m</string>
<key>path</key>
<string>Reachability/Reachability.m</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
<key>91867938D6264D9DBB1DF6C8</key>
<dict>
<key>fileRef</key>
<string>8FA7EF4ED8E345469F206120</string>
<key>isa</key>
<string>PBXBuildFile</string>
<key>settings</key>
<dict>
<key>COMPILER_FLAGS</key>
<string>-fobjc-arc -DOS_OBJECT_USE_OBJC=0</string>
</dict>
</dict>
<key>97E49F178121406DAB1891DB</key>
<dict>
<key>buildSettings</key>
<dict/>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Debug</string>
</dict>
<key>A6D1B279E4B642BDB2DC13A9</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
<key>name</key>
<string>Reachability.h</string>
<key>path</key>
<string>Reachability/Reachability.h</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
<key>AD527E8190E44ACC9A90A95C</key>
<dict>
<key>fileRef</key>
<string>CD04A367A1D9402D8B7E4C02</string>
<key>isa</key>
<string>PBXBuildFile</string>
<key>settings</key>
<dict/>
</dict>
<key>AF08B32879FA47258A68C90A</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
<string>2A4E667ADC4E472993861E35</string>
</array>
<key>isa</key>
<string>PBXFrameworksBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
<key>B914A59A880A40B986D10310</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>wrapper.framework</string>
<key>name</key>
<string>Foundation.framework</string>
<key>path</key>
<string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/Foundation.framework</string>
<key>sourceTree</key>
<string>DEVELOPER_DIR</string>
</dict>
<key>BEB9361C2DAA45E6A56EF811</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
<string>654E702666E745889FF3235F</string>
</array>
<key>isa</key>
<string>PBXHeadersBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
<key>CBC7333C7477479EBD3F2D4C</key>
<dict>
<key>baseConfigurationReference</key>
<string>127860E82AB2415994BF2184</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
<key>ARCHS</key>
<string>$(ARCHS_STANDARD_32_BIT)</string>
<key>COPY_PHASE_STRIP</key>
<string>NO</string>
<key>DSTROOT</key>
<string>/tmp/xcodeproj.dst</string>
<key>GCC_C_LANGUAGE_STANDARD</key>
<string>gnu99</string>
<key>GCC_DYNAMIC_NO_PIC</key>
<string>NO</string>
<key>GCC_OPTIMIZATION_LEVEL</key>
<string>0</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
<key>GCC_PREFIX_HEADER</key>
<string>Pods-prefix.pch</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
<string>DEBUG=1</string>
<string>$(inherited)</string>
</array>
<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
<string>NO</string>
<key>GCC_VERSION</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>GCC_WARN_INHIBIT_ALL_WARNINGS</key>
<string>NO</string>
<key>INSTALL_PATH</key>
<string>$(BUILT_PRODUCTS_DIR)</string>
<key>IPHONEOS_DEPLOYMENT_TARGET</key>
<string>6.0</string>
<key>OTHER_LDFLAGS</key>
<string></string>
<key>PODS_HEADERS_SEARCH_PATHS</key>
<string>${PODS_BUILD_HEADERS_SEARCH_PATHS}</string>
<key>PODS_ROOT</key>
<string>${SRCROOT}</string>
<key>PRODUCT_NAME</key>
<string>$(TARGET_NAME)</string>
<key>PUBLIC_HEADERS_FOLDER_PATH</key>
<string>$(TARGET_NAME)</string>
<key>SDKROOT</key>
<string>iphoneos</string>
<key>SKIP_INSTALL</key>
<string>YES</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Debug</string>
</dict>
<key>CD04A367A1D9402D8B7E4C02</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
<key>name</key>
<string>PodsDummy_Pods.m</string>
<key>path</key>
<string>PodsDummy_Pods.m</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
<key>DF0141F81653478BBB7C39C2</key>
<dict>
<key>children</key>
<array>
<string>85B947A905E04A3CA5EFD29E</string>
<string>CD04A367A1D9402D8B7E4C02</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Targets Support Files</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E13FBFA044E34F7FB7953B54</key>
<dict>
<key>buildSettings</key>
<dict/>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Release</string>
</dict>
<key>E1D71DCF7E1540FB8F6E32B9</key>
<dict>
<key>children</key>
<array>
<string>5D69D9FCD15240F7B515DEF6</string>
<string>F61D99441BC849739E767F95</string>
<string>2DCCB1EC59E74E46811EDF17</string>
<string>DF0141F81653478BBB7C39C2</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>EBA2375641584DB19A8FAB21</key>
<dict>
<key>attributes</key>
<dict>
<key>LastUpgradeCheck</key>
<string>0450</string>
</dict>
<key>buildConfigurationList</key>
<string>5F51CD6A6E8A4C93A3F2D543</string>
<key>compatibilityVersion</key>
<string>Xcode 3.2</string>
<key>developmentRegion</key>
<string>English</string>
<key>hasScannedForEncodings</key>
<string>0</string>
<key>isa</key>
<string>PBXProject</string>
<key>knownRegions</key>
<array>
<string>en</string>
</array>
<key>mainGroup</key>
<string>E1D71DCF7E1540FB8F6E32B9</string>
<key>productRefGroup</key>
<string>5D69D9FCD15240F7B515DEF6</string>
<key>projectReferences</key>
<array/>
<key>targets</key>
<array>
<string>00DD1010F5394BEE81356529</string>
</array>
</dict>
<key>EC29F5F6CFD84982A041AAB9</key>
<dict>
<key>explicitFileType</key>
<string>archive.ar</string>
<key>includeInIndex</key>
<string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>name</key>
<string>libPods.a</string>
<key>path</key>
<string>libPods.a</string>
<key>sourceTree</key>
<string>BUILT_PRODUCTS_DIR</string>
</dict>
<key>F61D99441BC849739E767F95</key>
<dict>
<key>children</key>
<array>
<string>B914A59A880A40B986D10310</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Frameworks</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
</dict>
<key>rootObject</key>
<string>EBA2375641584DB19A8FAB21</string>
</dict>
</plist>
@interface PodsDummy_Pods : NSObject
@end
@implementation PodsDummy_Pods
@end
# Reachability
This is a drop-in replacement for Apples Reachability class. It is ARC compatible, uses the new GCD methods to notify of network interface changes.
In addition to the standard NSNotification it supports the use of Blocks for when the network becomes reachable and unreachable.
Finally you can specify wether or not a WWAN connection is considered "reachable".
## A Simple example
This sample uses Blocks to tell you when the interface state has changed. The blocks will be called on a BACKGROUND THREAD so you need to dispatch UI updates onto the main thread.
// allocate a reachability object
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
// set the blocks
reach.reachableBlock = ^(Reachability*reach)
{
NSLog(@"REACHABLE!");
};
reach.unreachableBlock = ^(Reachability*reach)
{
NSLog(@"UNREACHABLE!");
};
// start the notifier which will cause the reachability object to retain itself!
[reach startNotifier];
## Another simple example
This sample will use NSNotifications to tell you when the interface has changed, they will be delivered on the MAIN THREAD so you *can* do UI updates from within the function.
In addition it asks the Reachability object to consider the WWAN (3G/EDGE/CDMA) as a non-reachable connection (you might use this if you are writing a video streaming app, for example, to save the users data plan).
// allocate a reachability object
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
// tell the reachability that we DONT want to be reachable on 3G/EDGE/CDMA
reach.reachableOnWWAN = NO;
// here we set up a NSNotification observer. The Reachability that caused the notification
// is passed in the object parameter
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
[reach startNotifier]
\ No newline at end of file
/*
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 support GCD objects?
* It does if the minimum deployment target is iOS 6+ or Mac OS X 8+
**/
#if TARGET_OS_IPHONE
// Compiling for iOS
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 // iOS 6.0 or later
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
#else // iOS 5.X or earlier
#define NEEDS_DISPATCH_RETAIN_RELEASE 1
#endif
#else
// Compiling for Mac OS X
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 // Mac OS X 10.8 or later
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
#else
#define NEEDS_DISPATCH_RETAIN_RELEASE 1 // Mac OS X 10.7 or earlier
#endif
#endif
extern NSString *const kReachabilityChangedNotification;
typedef enum
{
// Apple NetworkStatus Compatible Names.
NotReachable = 0,
ReachableViaWiFi = 2,
ReachableViaWWAN = 1
} NetworkStatus;
@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
/*
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 dont 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
{
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 dont 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 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];
});
}
@end
Pod::Spec.new do |s|
s.name = 'Reachability'
s.version = '3.1.0'
s.license = 'BSD'
s.homepage = 'https://github.com/tonymillion/Reachability'
s.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
s.summary = 'ARC and GCD Compatible Reachability Class for iOS. Drop in replacement for Apple Reachability.'
s.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
s.source_files = 'Reachability.{h,m}'
s.framework = 'SystemConfiguration'
s.requires_arc = false
end
<?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>archiveVersion</key>
<string>1</string>
<key>classes</key>
<dict/>
<key>objectVersion</key>
<string>46</string>
<key>objects</key>
<dict>
<key>061523DA9D2646ACA1EF295C</key>
<dict>
<key>explicitFileType</key>
<string>archive.ar</string>
<key>includeInIndex</key>
<string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>name</key>
<string>libPods.a</string>
<key>path</key>
<string>libPods.a</string>
<key>sourceTree</key>
<string>BUILT_PRODUCTS_DIR</string>
</dict>
<key>0AEC166B36EA4BBAB35AEB94</key>
<dict>
<key>fileRef</key>
<string>061523DA9D2646ACA1EF295C</string>
<key>isa</key>
<string>PBXBuildFile</string>
<key>settings</key>
<dict/>
</dict>
<key>26E99B1E26B641169EE1B5F6</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array/>
<key>inputPaths</key>
<array/>
<key>isa</key>
<string>PBXShellScriptBuildPhase</string>
<key>name</key>
<string>Copy Pods Resources</string>
<key>outputPaths</key>
<array/>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
<key>shellPath</key>
<string>/bin/sh</string>
<key>shellScript</key>
<string>"${SRCROOT}/Pods/Pods-resources.sh"
</string>
<key>showEnvVarsInLog</key>
<string>1</string>
</dict>
<key>E575589216C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558A416C5943000DC1500</string>
<string>E575589D16C5943000DC1500</string>
<string>E575589C16C5943000DC1500</string>
<string>EFF75FAF8D54497F8417E948</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E575589316C5943000DC1500</key>
<dict>
<key>attributes</key>
<dict>
<key>CLASSPREFIX</key>
<string>CP</string>
<key>LastUpgradeCheck</key>
<string>0460</string>
<key>ORGANIZATIONNAME</key>
<string>CocoaPods</string>
</dict>
<key>buildConfigurationList</key>
<string>E575589616C5943000DC1500</string>
<key>compatibilityVersion</key>
<string>Xcode 3.2</string>
<key>developmentRegion</key>
<string>English</string>
<key>hasScannedForEncodings</key>
<string>0</string>
<key>isa</key>
<string>PBXProject</string>
<key>knownRegions</key>
<array>
<string>en</string>
</array>
<key>mainGroup</key>
<string>E575589216C5943000DC1500</string>
<key>productRefGroup</key>
<string>E575589C16C5943000DC1500</string>
<key>projectDirPath</key>
<string></string>
<key>projectReferences</key>
<array/>
<key>projectRoot</key>
<string></string>
<key>targets</key>
<array>
<string>E575589A16C5943000DC1500</string>
</array>
</dict>
<key>E575589616C5943000DC1500</key>
<dict>
<key>buildConfigurations</key>
<array>
<string>E57558B616C5943100DC1500</string>
<string>E57558B716C5943100DC1500</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
<key>defaultConfigurationName</key>
<string>Release</string>
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
<key>E575589716C5943000DC1500</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
<string>E57558AB16C5943000DC1500</string>
<string>E57558B216C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXSourcesBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
<key>E575589816C5943000DC1500</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
<string>E575589F16C5943000DC1500</string>
<string>0AEC166B36EA4BBAB35AEB94</string>
</array>
<key>isa</key>
<string>PBXFrameworksBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
<key>E575589916C5943000DC1500</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
<string>E57558A916C5943000DC1500</string>
<string>E57558AF16C5943000DC1500</string>
<string>E57558B516C5943100DC1500</string>
</array>
<key>isa</key>
<string>PBXResourcesBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
<key>E575589A16C5943000DC1500</key>
<dict>
<key>buildConfigurationList</key>
<string>E57558B816C5943100DC1500</string>
<key>buildPhases</key>
<array>
<string>E575589716C5943000DC1500</string>
<string>E575589816C5943000DC1500</string>
<string>E575589916C5943000DC1500</string>
<string>26E99B1E26B641169EE1B5F6</string>
</array>
<key>buildRules</key>
<array/>
<key>dependencies</key>
<array/>
<key>isa</key>
<string>PBXNativeTarget</string>
<key>name</key>
<string>SampleApp</string>
<key>productName</key>
<string>SampleApp</string>
<key>productReference</key>
<string>E575589B16C5943000DC1500</string>
<key>productType</key>
<string>com.apple.product-type.application</string>
</dict>
<key>E575589B16C5943000DC1500</key>
<dict>
<key>explicitFileType</key>
<string>wrapper.application</string>
<key>includeInIndex</key>
<string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>path</key>
<string>SampleApp.app</string>
<key>sourceTree</key>
<string>BUILT_PRODUCTS_DIR</string>
</dict>
<key>E575589C16C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E575589B16C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Products</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E575589D16C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E575589E16C5943000DC1500</string>
<string>E57558A016C5943000DC1500</string>
<string>061523DA9D2646ACA1EF295C</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Frameworks</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E575589E16C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>wrapper.framework</string>
<key>name</key>
<string>Cocoa.framework</string>
<key>path</key>
<string>System/Library/Frameworks/Cocoa.framework</string>
<key>sourceTree</key>
<string>SDKROOT</string>
</dict>
<key>E575589F16C5943000DC1500</key>
<dict>
<key>fileRef</key>
<string>E575589E16C5943000DC1500</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
<key>E57558A016C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558A116C5943000DC1500</string>
<string>E57558A216C5943000DC1500</string>
<string>E57558A316C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Other Frameworks</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558A116C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>wrapper.framework</string>
<key>name</key>
<string>AppKit.framework</string>
<key>path</key>
<string>System/Library/Frameworks/AppKit.framework</string>
<key>sourceTree</key>
<string>SDKROOT</string>
</dict>
<key>E57558A216C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>wrapper.framework</string>
<key>name</key>
<string>CoreData.framework</string>
<key>path</key>
<string>System/Library/Frameworks/CoreData.framework</string>
<key>sourceTree</key>
<string>SDKROOT</string>
</dict>
<key>E57558A316C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>wrapper.framework</string>
<key>name</key>
<string>Foundation.framework</string>
<key>path</key>
<string>System/Library/Frameworks/Foundation.framework</string>
<key>sourceTree</key>
<string>SDKROOT</string>
</dict>
<key>E57558A416C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558B016C5943000DC1500</string>
<string>E57558B116C5943000DC1500</string>
<string>E57558B316C5943100DC1500</string>
<string>E57558A516C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>path</key>
<string>SampleApp</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558A516C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558A616C5943000DC1500</string>
<string>E57558A716C5943000DC1500</string>
<string>E57558AA16C5943000DC1500</string>
<string>E57558AC16C5943000DC1500</string>
<string>E57558AD16C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
<string>Supporting Files</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558A616C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>text.plist.xml</string>
<key>path</key>
<string>SampleApp-Info.plist</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558A716C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558A816C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXVariantGroup</string>
<key>name</key>
<string>InfoPlist.strings</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558A816C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>text.plist.strings</string>
<key>name</key>
<string>en</string>
<key>path</key>
<string>en.lproj/InfoPlist.strings</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558A916C5943000DC1500</key>
<dict>
<key>fileRef</key>
<string>E57558A716C5943000DC1500</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
<key>E57558AA16C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
<key>path</key>
<string>main.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558AB16C5943000DC1500</key>
<dict>
<key>fileRef</key>
<string>E57558AA16C5943000DC1500</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
<key>E57558AC16C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
<key>path</key>
<string>SampleApp-Prefix.pch</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558AD16C5943000DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558AE16C5943000DC1500</string>
</array>
<key>isa</key>
<string>PBXVariantGroup</string>
<key>name</key>
<string>Credits.rtf</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558AE16C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>text.rtf</string>
<key>name</key>
<string>en</string>
<key>path</key>
<string>en.lproj/Credits.rtf</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558AF16C5943000DC1500</key>
<dict>
<key>fileRef</key>
<string>E57558AD16C5943000DC1500</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
<key>E57558B016C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
<key>path</key>
<string>CPAppDelegate.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558B116C5943000DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
<key>path</key>
<string>CPAppDelegate.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558B216C5943000DC1500</key>
<dict>
<key>fileRef</key>
<string>E57558B116C5943000DC1500</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
<key>E57558B316C5943100DC1500</key>
<dict>
<key>children</key>
<array>
<string>E57558B416C5943100DC1500</string>
</array>
<key>isa</key>
<string>PBXVariantGroup</string>
<key>name</key>
<string>MainMenu.xib</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558B416C5943100DC1500</key>
<dict>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>file.xib</string>
<key>name</key>
<string>en</string>
<key>path</key>
<string>en.lproj/MainMenu.xib</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
<key>E57558B516C5943100DC1500</key>
<dict>
<key>fileRef</key>
<string>E57558B316C5943100DC1500</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
<key>E57558B616C5943100DC1500</key>
<dict>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
<key>ARCHS</key>
<string>$(ARCHS_STANDARD_64_BIT)</string>
<key>CLANG_CXX_LANGUAGE_STANDARD</key>
<string>gnu++0x</string>
<key>CLANG_CXX_LIBRARY</key>
<string>libc++</string>
<key>CLANG_WARN_CONSTANT_CONVERSION</key>
<string>YES</string>
<key>CLANG_WARN_EMPTY_BODY</key>
<string>YES</string>
<key>CLANG_WARN_ENUM_CONVERSION</key>
<string>YES</string>
<key>CLANG_WARN_INT_CONVERSION</key>
<string>YES</string>
<key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>
<string>YES</string>
<key>COPY_PHASE_STRIP</key>
<string>NO</string>
<key>GCC_C_LANGUAGE_STANDARD</key>
<string>gnu99</string>
<key>GCC_DYNAMIC_NO_PIC</key>
<string>NO</string>
<key>GCC_ENABLE_OBJC_EXCEPTIONS</key>
<string>YES</string>
<key>GCC_OPTIMIZATION_LEVEL</key>
<string>0</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
<string>DEBUG=1</string>
<string>$(inherited)</string>
</array>
<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
<string>NO</string>
<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>
<string>YES</string>
<key>GCC_WARN_ABOUT_RETURN_TYPE</key>
<string>YES</string>
<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
<string>YES</string>
<key>GCC_WARN_UNUSED_VARIABLE</key>
<string>YES</string>
<key>MACOSX_DEPLOYMENT_TARGET</key>
<string>10.8</string>
<key>ONLY_ACTIVE_ARCH</key>
<string>YES</string>
<key>SDKROOT</key>
<string>macosx</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Debug</string>
</dict>
<key>E57558B716C5943100DC1500</key>
<dict>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
<key>ARCHS</key>
<string>$(ARCHS_STANDARD_64_BIT)</string>
<key>CLANG_CXX_LANGUAGE_STANDARD</key>
<string>gnu++0x</string>
<key>CLANG_CXX_LIBRARY</key>
<string>libc++</string>
<key>CLANG_WARN_CONSTANT_CONVERSION</key>
<string>YES</string>
<key>CLANG_WARN_EMPTY_BODY</key>
<string>YES</string>
<key>CLANG_WARN_ENUM_CONVERSION</key>
<string>YES</string>
<key>CLANG_WARN_INT_CONVERSION</key>
<string>YES</string>
<key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>
<string>YES</string>
<key>COPY_PHASE_STRIP</key>
<string>YES</string>
<key>DEBUG_INFORMATION_FORMAT</key>
<string>dwarf-with-dsym</string>
<key>GCC_C_LANGUAGE_STANDARD</key>
<string>gnu99</string>
<key>GCC_ENABLE_OBJC_EXCEPTIONS</key>
<string>YES</string>
<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>
<string>YES</string>
<key>GCC_WARN_ABOUT_RETURN_TYPE</key>
<string>YES</string>
<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
<string>YES</string>
<key>GCC_WARN_UNUSED_VARIABLE</key>
<string>YES</string>
<key>MACOSX_DEPLOYMENT_TARGET</key>
<string>10.8</string>
<key>SDKROOT</key>
<string>macosx</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Release</string>
</dict>
<key>E57558B816C5943100DC1500</key>
<dict>
<key>buildConfigurations</key>
<array>
<string>E57558B916C5943100DC1500</string>
<string>E57558BA16C5943100DC1500</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
<key>E57558B916C5943100DC1500</key>
<dict>
<key>baseConfigurationReference</key>
<string>EFF75FAF8D54497F8417E948</string>
<key>buildSettings</key>
<dict>
<key>COMBINE_HIDPI_IMAGES</key>
<string>YES</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
<key>GCC_PREFIX_HEADER</key>
<string>SampleApp/SampleApp-Prefix.pch</string>
<key>INFOPLIST_FILE</key>
<string>SampleApp/SampleApp-Info.plist</string>
<key>PRODUCT_NAME</key>
<string>$(TARGET_NAME)</string>
<key>WRAPPER_EXTENSION</key>
<string>app</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Debug</string>
</dict>
<key>E57558BA16C5943100DC1500</key>
<dict>
<key>baseConfigurationReference</key>
<string>EFF75FAF8D54497F8417E948</string>
<key>buildSettings</key>
<dict>
<key>COMBINE_HIDPI_IMAGES</key>
<string>YES</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
<key>GCC_PREFIX_HEADER</key>
<string>SampleApp/SampleApp-Prefix.pch</string>
<key>INFOPLIST_FILE</key>
<string>SampleApp/SampleApp-Info.plist</string>
<key>PRODUCT_NAME</key>
<string>$(TARGET_NAME)</string>
<key>WRAPPER_EXTENSION</key>
<string>app</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
<string>Release</string>
</dict>
<key>EFF75FAF8D54497F8417E948</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>text.xcconfig</string>
<key>name</key>
<string>Pods.xcconfig</string>
<key>path</key>
<string>Pods/Pods.xcconfig</string>
<key>sourceTree</key>
<string>SOURCE_ROOT</string>
</dict>
</dict>
<key>rootObject</key>
<string>E575589316C5943000DC1500</string>
</dict>
</plist>
<?xml version='1.0' encoding='UTF-8'?><Workspace version='1.0'><FileRef location='group:Pods/Pods.xcodeproj'/><FileRef location='group:SampleApp.xcodeproj'/></Workspace>
\ No newline at end of file
platform :ios, '6.0'
pod "Reachability", "3.1.0"
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
E575589F16C5943000DC1500 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E575589E16C5943000DC1500 /* Cocoa.framework */; };
E57558A916C5943000DC1500 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E57558A716C5943000DC1500 /* InfoPlist.strings */; };
E57558AB16C5943000DC1500 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E57558AA16C5943000DC1500 /* main.m */; };
E57558AF16C5943000DC1500 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = E57558AD16C5943000DC1500 /* Credits.rtf */; };
E57558B216C5943000DC1500 /* CPAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E57558B116C5943000DC1500 /* CPAppDelegate.m */; };
E57558B516C5943100DC1500 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E57558B316C5943100DC1500 /* MainMenu.xib */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
E575589B16C5943000DC1500 /* SampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
E575589E16C5943000DC1500 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
E57558A116C5943000DC1500 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
E57558A216C5943000DC1500 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
E57558A316C5943000DC1500 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
E57558A616C5943000DC1500 /* SampleApp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SampleApp-Info.plist"; sourceTree = "<group>"; };
E57558A816C5943000DC1500 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
E57558AA16C5943000DC1500 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
E57558AC16C5943000DC1500 /* SampleApp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SampleApp-Prefix.pch"; sourceTree = "<group>"; };
E57558AE16C5943000DC1500 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; };
E57558B016C5943000DC1500 /* CPAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPAppDelegate.h; sourceTree = "<group>"; };
E57558B116C5943000DC1500 /* CPAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPAppDelegate.m; sourceTree = "<group>"; };
E57558B416C5943100DC1500 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
E575589816C5943000DC1500 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E575589F16C5943000DC1500 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
E575589216C5943000DC1500 = {
isa = PBXGroup;
children = (
E57558A416C5943000DC1500 /* SampleApp */,
E575589D16C5943000DC1500 /* Frameworks */,
E575589C16C5943000DC1500 /* Products */,
);
sourceTree = "<group>";
};
E575589C16C5943000DC1500 /* Products */ = {
isa = PBXGroup;
children = (
E575589B16C5943000DC1500 /* SampleApp.app */,
);
name = Products;
sourceTree = "<group>";
};
E575589D16C5943000DC1500 /* Frameworks */ = {
isa = PBXGroup;
children = (
E575589E16C5943000DC1500 /* Cocoa.framework */,
E57558A016C5943000DC1500 /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
E57558A016C5943000DC1500 /* Other Frameworks */ = {
isa = PBXGroup;
children = (
E57558A116C5943000DC1500 /* AppKit.framework */,
E57558A216C5943000DC1500 /* CoreData.framework */,
E57558A316C5943000DC1500 /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
E57558A416C5943000DC1500 /* SampleApp */ = {
isa = PBXGroup;
children = (
E57558B016C5943000DC1500 /* CPAppDelegate.h */,
E57558B116C5943000DC1500 /* CPAppDelegate.m */,
E57558B316C5943100DC1500 /* MainMenu.xib */,
E57558A516C5943000DC1500 /* Supporting Files */,
);
path = SampleApp;
sourceTree = "<group>";
};
E57558A516C5943000DC1500 /* Supporting Files */ = {
isa = PBXGroup;
children = (
E57558A616C5943000DC1500 /* SampleApp-Info.plist */,
E57558A716C5943000DC1500 /* InfoPlist.strings */,
E57558AA16C5943000DC1500 /* main.m */,
E57558AC16C5943000DC1500 /* SampleApp-Prefix.pch */,
E57558AD16C5943000DC1500 /* Credits.rtf */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
E575589A16C5943000DC1500 /* SampleApp */ = {
isa = PBXNativeTarget;
buildConfigurationList = E57558B816C5943100DC1500 /* Build configuration list for PBXNativeTarget "SampleApp" */;
buildPhases = (
E575589716C5943000DC1500 /* Sources */,
E575589816C5943000DC1500 /* Frameworks */,
E575589916C5943000DC1500 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = SampleApp;
productName = SampleApp;
productReference = E575589B16C5943000DC1500 /* SampleApp.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
E575589316C5943000DC1500 /* Project object */ = {
isa = PBXProject;
attributes = {
CLASSPREFIX = CP;
LastUpgradeCheck = 0460;
ORGANIZATIONNAME = CocoaPods;
};
buildConfigurationList = E575589616C5943000DC1500 /* Build configuration list for PBXProject "SampleApp" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = E575589216C5943000DC1500;
productRefGroup = E575589C16C5943000DC1500 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
E575589A16C5943000DC1500 /* SampleApp */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
E575589916C5943000DC1500 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E57558A916C5943000DC1500 /* InfoPlist.strings in Resources */,
E57558AF16C5943000DC1500 /* Credits.rtf in Resources */,
E57558B516C5943100DC1500 /* MainMenu.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
E575589716C5943000DC1500 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E57558AB16C5943000DC1500 /* main.m in Sources */,
E57558B216C5943000DC1500 /* CPAppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
E57558A716C5943000DC1500 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
E57558A816C5943000DC1500 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
E57558AD16C5943000DC1500 /* Credits.rtf */ = {
isa = PBXVariantGroup;
children = (
E57558AE16C5943000DC1500 /* en */,
);
name = Credits.rtf;
sourceTree = "<group>";
};
E57558B316C5943100DC1500 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
E57558B416C5943100DC1500 /* en */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
E57558B616C5943100DC1500 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
E57558B716C5943100DC1500 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
SDKROOT = macosx;
};
name = Release;
};
E57558B916C5943100DC1500 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "SampleApp/SampleApp-Prefix.pch";
INFOPLIST_FILE = "SampleApp/SampleApp-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Debug;
};
E57558BA16C5943100DC1500 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "SampleApp/SampleApp-Prefix.pch";
INFOPLIST_FILE = "SampleApp/SampleApp-Info.plist";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
E575589616C5943000DC1500 /* Build configuration list for PBXProject "SampleApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E57558B616C5943100DC1500 /* Debug */,
E57558B716C5943100DC1500 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
E57558B816C5943100DC1500 /* Build configuration list for PBXNativeTarget "SampleApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E57558B916C5943100DC1500 /* Debug */,
E57558BA16C5943100DC1500 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = E575589316C5943000DC1500 /* Project object */;
}
# ---------------------------------- #
# CocoaPods Integration tests take 2 #
# ---------------------------------- #
#-----------------------------------------------------------------------------#
# The following integrations tests are based on file comparison.
#
# 1. For each test there is a folder with a `before` and `after` subfolders.
# 2. The contents of the before folder are copied to the `TMP_DIR` folder and
# then the given arguments are passed to the `POD_BINARY`.
# 3. After the pod command completes the execution the each file in the `after`
# subfolder is compared to be to the contents of the temporary directory.
# If the contents of the file do not match an error is registered. Xcode
# projects are compared in an UUID agnostic way.
#
# Notes:
#
# - The output of the pod command is saved in the `execution_output.txt` file
# which should be added to the Pods folders to test the CocoaPods UI.
# - To create a new test, just create a before folder with the environment to
# test, copy it to the after folder and run the tested pod command inside.
# Then just add the tests below this files with the name of the folder and
# the arguments.
#
# Rationale:
#
# - Have a way to track precisely the evolution of the artifacts (and of the
# UI) produced by CocoaPods (git diff of the after folders).
# - Allow uses to submit pull requests with the environment necessary to
# reproduce an issue.
# - Have robust tests which don't depend on the programmatic interface of
# CocoaPods. These tests depend only the binary and its arguments an thus are
# suitable for testing CP regardless of the implementation (they could even
# work for an Objective-C one)
#-----------------------------------------------------------------------------#
# The spec helper is not required on purpose to keep those tests segregated.
# It would also create issues because it clears the temp folder before every
# requirement (`it` call).
require 'pathname'
ROOT = Pathname.new(File.expand_path('../../', __FILE__))
TMP_DIR = ROOT + 'tmp'
POD_BINARY = "ruby " + ROOT.to_s + '/bin/pod' unless defined? POD_BINARY
$:.unshift((ROOT + 'spec').to_s)
require 'spec_helper/bacon'
require 'colored'
require 'diffy'
require 'Xcodeproj'
#-----------------------------------------------------------------------------#
# @!group Description implementation
def pod_check(command, folder)
copy_files("installation")
pod "install"
check_with_folder("installation")
end
#--------------------------------------#
# @!group Helpers
# Copies the before subdirectory of the given tests folder in the temporary
# directory.
#
# @param [String] folder
# the name of the folder of the tests.
#
def copy_files(folder)
if TMP_DIR.exist?
TMP_DIR.rmtree
TMP_DIR.mkpath
end
source = File.expand_path("../integration/#{folder}/before", __FILE__)
FileUtils.cp_r(Dir.glob("#{source}/*"), TMP_DIR)
end
# Runs the Pod executable with the given arguments in the temporary directory.
#
# @param [String] arguments
# the arguments to pass to the CocoaPods binary.
#
# @note If the pod binary is called with the ruby executable it requires
# bundler ensuring that the execution is performed in the correct
# environment.
#
def pod(arguments)
Dir.chdir(TMP_DIR) do
# TODO CP 0.16 doesn't offer the possibility to skip just the installation
# of the docs.
command = "#{POD_BINARY} #{arguments} --no-update --no-doc --verbose --no-color"
output = `#{command}`
File.open('execution_output.txt', 'w') do |file|
file.write(command.gsub(ROOT.to_s, 'ROOT'))
file.write(output.gsub(ROOT.to_s, 'ROOT').gsub(%r[/Users/.*/Library/Caches/CocoaPods/],"CACHES_DIR/"))
end
end
end
# Creates a requirement which compares every file in the after folder with the
# artifacts created by the pod executable in the temporary directory according
# to its file type.
#
# @param [String] folder
# the name of the folder of the tests.
#
def check_with_folder(folder)
source = File.expand_path("../integration/#{folder}", __FILE__)
Dir.glob("#{source}/after/**/*") do |expected|
next unless File.file?(expected)
relative_path = expected.gsub("#{source}/after/", '')
produced = TMP_DIR + relative_path
case expected
when %r[/xcuserdata/]
# skip
when %r[\Podfile\.lock$]
compare_lockfile(expected, produced, relative_path)
when %r[\.pbxproj$]
compare_xcodeproj(expected, produced, relative_path)
else
compare_generic(expected, produced, relative_path)
end
end
end
#--------------------------------------#
# @!group File Comparisons
# Compares two lockfiles because CocoaPods 0.16 doesn't oder them in 1.8.7.
#
def compare_lockfile(expected, produced, relative_path)
expected_yaml = YAML::load(File.open(expected))
produced_yaml = YAML::load(File.open(produced))
desc = "Lockfile comparison error `#{relative_path}`"
desc << "\n EXPECTED:\n#{expected_yaml}\n"
desc << "\n PRODUCED:\n#{produced_yaml}\n"
it relative_path do
expected_yaml.should.satisfy(desc) do |expected_yaml|
expected_yaml == produced_yaml
end
end
end
# Compares two Xcode projects in an UUID insensitive fashion and producing a
# clear diff to highlight the differences.
#
def compare_xcodeproj(expected, produced, relative_path)
expected_proj = Xcodeproj::Project.new(expected.gsub('project.pbxproj',''))
produced_proj = Xcodeproj::Project.new(produced.to_s.gsub('project.pbxproj',''))
diff = produced_proj.to_tree_hash.recursive_diff(expected_proj.to_tree_hash, "#produced#", "#reference#")
desc = "Project comparison error `#{relative_path}`"
if diff
desc << "\n#{diff.to_yaml.gsub('"#produced#"','produced'.red).gsub('"#reference#"','reference'.yellow)}"
end
it relative_path do
diff.should.satisfy(desc) do |diff|
diff.nil?
end
end
end
# Compares two files to check if they are identical and produces a clear diff
# to highlight the differences.
#
def compare_generic(expected, produced, relative_path)
is_equal = FileUtils.compare_file(expected, produced)
it relative_path do
description = []
description << "File comparison error `#{relative_path}`"
description << produced
description << expected
description << ""
description << ("--- DIFF " << "-" * 70)
Diffy::Diff.new(produced.to_s, expected.to_s, :source => 'files', :context => 3).each do |line|
case line
when /^\+/ then description << line.gsub("\n",'').green
when /^-/ then description << line.gsub("\n",'').red
else description << line.gsub("\n",'')
end
end
description << ("--- DIFF " << "-" * 70)
description << ""
is_equal.should.satisfy(description * "\n") do |is_equal|
is_equal == true
end
end
end
#-----------------------------------------------------------------------------#
describe "Integration with examples" do
describe "Integrates a project with CocoaPods" do
pod_check "install", "installation"
end
describe "Adds a Pod to an existing installation" do
# pod_check "install", "add_pod"
end
describe "Removes a Pod from an existing installation" do
# pod_check "install", "remove_pod"
end
describe "Creates an installation with multiple target definitions" do
# pod_check "install", "multiple_targets"
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment