aboutsummaryrefslogtreecommitdiffstats
path: root/iphone
diff options
context:
space:
mode:
Diffstat (limited to 'iphone')
-rw-r--r--iphone/FixMyStreet/Classes/FixMyStreetAppDelegate.m10
-rw-r--r--iphone/FixMyStreet/Classes/InputTableViewController.h2
-rw-r--r--iphone/FixMyStreet/Classes/InputTableViewController.m5
-rwxr-xr-xiphone/FixMyStreet/Classes/Reachability.h122
-rwxr-xr-xiphone/FixMyStreet/Classes/Reachability.m585
-rw-r--r--iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.mode1v3105
-rw-r--r--iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.pbxuser975
-rwxr-xr-xiphone/FixMyStreet/FixMyStreet.xcodeproj/project.pbxproj46
-rwxr-xr-xiphone/FixMyStreet/Icon.pngbin10233 -> 2051 bytes
-rw-r--r--iphone/FixMyStreet/MainViewController.xib2
-rwxr-xr-xiphone/FixMyStreet/MyCLController.h2
-rwxr-xr-xiphone/FixMyStreet/MyCLController.m3
12 files changed, 1691 insertions, 166 deletions
diff --git a/iphone/FixMyStreet/Classes/FixMyStreetAppDelegate.m b/iphone/FixMyStreet/Classes/FixMyStreetAppDelegate.m
index 8ad133ac8..611acedf5 100644
--- a/iphone/FixMyStreet/Classes/FixMyStreetAppDelegate.m
+++ b/iphone/FixMyStreet/Classes/FixMyStreetAppDelegate.m
@@ -8,6 +8,7 @@
#import "FixMyStreetAppDelegate.h"
#import "InputTableViewController.h"
+#import "Reachability.h"
@implementation FixMyStreetAppDelegate
@@ -103,6 +104,15 @@
// Report stuff
-(void)uploadReport {
+ // Check internet connection status
+ NetworkStatus internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
+ if (internetConnectionStatus == NotReachable) {
+ UIAlertView *v = [[UIAlertView alloc] initWithTitle:@"Reporting failed" message:@"You need to be connected to the internet to report a problem." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
+ [v show];
+ [v release];
+ return;
+ }
+
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
uploading = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
diff --git a/iphone/FixMyStreet/Classes/InputTableViewController.h b/iphone/FixMyStreet/Classes/InputTableViewController.h
index a7b994676..effeafab5 100644
--- a/iphone/FixMyStreet/Classes/InputTableViewController.h
+++ b/iphone/FixMyStreet/Classes/InputTableViewController.h
@@ -38,6 +38,6 @@
//MyCLControllerDelegate
-(void)newLocationUpdate:(CLLocation *)location;
--(void)newError:(NSString *)text;
+-(void)newLocationError:(NSString *)text;
@end
diff --git a/iphone/FixMyStreet/Classes/InputTableViewController.m b/iphone/FixMyStreet/Classes/InputTableViewController.m
index 0ac2b693b..3ad127c58 100644
--- a/iphone/FixMyStreet/Classes/InputTableViewController.m
+++ b/iphone/FixMyStreet/Classes/InputTableViewController.m
@@ -289,7 +289,10 @@
[self enableSubmissionButton];
}
--(void)newError:(NSString *)text {
+-(void)newLocationError:(NSString *)text {
+ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location required" message:text delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
+ [alert show];
+ [alert release];
}
// Buttons
diff --git a/iphone/FixMyStreet/Classes/Reachability.h b/iphone/FixMyStreet/Classes/Reachability.h
new file mode 100755
index 000000000..18beaea3e
--- /dev/null
+++ b/iphone/FixMyStreet/Classes/Reachability.h
@@ -0,0 +1,122 @@
+/*
+
+File: Reachability.h
+Abstract: SystemConfiguration framework wrapper.
+
+Version: 1.5
+
+Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc.
+("Apple") in consideration of your agreement to the following terms, and your
+use, installation, modification or redistribution of this Apple software
+constitutes acceptance of these terms. If you do not agree with these terms,
+please do not use, install, modify or redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject
+to these terms, Apple grants you a personal, non-exclusive license, under
+Apple's copyrights in this original Apple software (the "Apple Software"), to
+use, reproduce, modify and redistribute the Apple Software, with or without
+modifications, in source and/or binary forms; provided that if you redistribute
+the Apple Software in its entirety and without modifications, you must retain
+this notice and the following text and disclaimers in all such redistributions
+of the Apple Software.
+Neither the name, trademarks, service marks or logos of Apple Inc. may be used
+to endorse or promote products derived from the Apple Software without specific
+prior written permission from Apple. Except as expressly stated in this notice,
+no other rights or licenses, express or implied, are granted by Apple herein,
+including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be
+incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
+COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR
+DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF
+CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
+APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (C) 2008 Apple Inc. All Rights Reserved.
+
+*/
+
+#import <UIKit/UIKit.h>
+#import <SystemConfiguration/SystemConfiguration.h>
+
+@class Reachability;
+
+@interface Reachability : NSObject {
+
+@private
+ BOOL _networkStatusNotificationsEnabled;
+
+ NSString *_hostName;
+ NSString *_address;
+
+ NSMutableDictionary *_reachabilityQueries;
+}
+
+/*
+ An enumeration that defines the return values of the network state
+ of the device.
+ */
+typedef enum {
+ NotReachable = 0,
+ ReachableViaCarrierDataNetwork,
+ ReachableViaWiFiNetwork
+} NetworkStatus;
+
+
+// Set to YES to register for changes in network status. Otherwise reachability queries
+// will be handled synchronously.
+@property BOOL networkStatusNotificationsEnabled;
+// The remote host whose reachability will be queried.
+// Either this or 'addressName' must be set.
+@property (nonatomic, retain) NSString *hostName;
+// The IP address of the remote host whose reachability will be queried.
+// Either this or 'hostName' must be set.
+@property (nonatomic, retain) NSString *address;
+// A cache of ReachabilityQuery objects, which encapsulate a SCNetworkReachabilityRef, a host or address, and a run loop. The keys are host names or addresses.
+@property (nonatomic, assign) NSMutableDictionary *reachabilityQueries;
+
+// This class is intended to be used as a singleton.
++ (Reachability *)sharedReachability;
+
+// Is self.hostName is not nil, determines its reachability.
+// If self.hostName is nil and self.address is not nil, determines the reachability of self.address.
+- (NetworkStatus)remoteHostStatus;
+// Is the device able to communicate with Internet hosts? If so, through which network interface?
+- (NetworkStatus)internetConnectionStatus;
+// Is the device able to communicate with hosts on the local WiFi network? (Typically these are Bonjour hosts).
+- (NetworkStatus)localWiFiConnectionStatus;
+
+/*
+ When reachability change notifications are posted, the callback method 'ReachabilityCallback' is called
+ and posts a notification that the client application can observe to learn about changes.
+ */
+static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info);
+
+@end
+
+@interface ReachabilityQuery : NSObject
+{
+@private
+ SCNetworkReachabilityRef _reachabilityRef;
+ CFMutableArrayRef _runLoops;
+ NSString *_hostNameOrAddress;
+}
+// Keep around each network reachability query object so that we can
+// register for updates from those objects.
+@property (nonatomic) SCNetworkReachabilityRef reachabilityRef;
+@property (nonatomic, retain) NSString *hostNameOrAddress;
+@property (nonatomic) CFMutableArrayRef runLoops;
+
+- (void)scheduleOnRunLoop:(NSRunLoop *)inRunLoop;
+
+@end
+
diff --git a/iphone/FixMyStreet/Classes/Reachability.m b/iphone/FixMyStreet/Classes/Reachability.m
new file mode 100755
index 000000000..c1f159c55
--- /dev/null
+++ b/iphone/FixMyStreet/Classes/Reachability.m
@@ -0,0 +1,585 @@
+/*
+
+File: Reachability.m
+Abstract: SystemConfiguration framework wrapper.
+
+Version: 1.5
+
+Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc.
+("Apple") in consideration of your agreement to the following terms, and your
+use, installation, modification or redistribution of this Apple software
+constitutes acceptance of these terms. If you do not agree with these terms,
+please do not use, install, modify or redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject
+to these terms, Apple grants you a personal, non-exclusive license, under
+Apple's copyrights in this original Apple software (the "Apple Software"), to
+use, reproduce, modify and redistribute the Apple Software, with or without
+modifications, in source and/or binary forms; provided that if you redistribute
+the Apple Software in its entirety and without modifications, you must retain
+this notice and the following text and disclaimers in all such redistributions
+of the Apple Software.
+Neither the name, trademarks, service marks or logos of Apple Inc. may be used
+to endorse or promote products derived from the Apple Software without specific
+prior written permission from Apple. Except as expressly stated in this notice,
+no other rights or licenses, express or implied, are granted by Apple herein,
+including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be
+incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
+COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR
+DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF
+CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
+APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (C) 2008 Apple Inc. All Rights Reserved.
+
+*/
+
+#import <sys/socket.h>
+#import <netinet/in.h>
+#import <netinet6/in6.h>
+#import <arpa/inet.h>
+#import <ifaddrs.h>
+#include <netdb.h>
+
+#import "Reachability.h"
+#import <SystemConfiguration/SCNetworkReachability.h>
+
+static NSString *kLinkLocalAddressKey = @"169.254.0.0";
+static NSString *kDefaultRouteKey = @"0.0.0.0";
+
+static Reachability *_sharedReachability;
+
+// A class extension that declares internal methods for this class.
+@interface Reachability()
+- (BOOL)isAdHocWiFiNetworkAvailableFlags:(SCNetworkReachabilityFlags *)outFlags;
+- (BOOL)isNetworkAvailableFlags:(SCNetworkReachabilityFlags *)outFlags;
+- (BOOL)isReachableWithoutRequiringConnection:(SCNetworkReachabilityFlags)flags;
+- (SCNetworkReachabilityRef)reachabilityRefForHostName:(NSString *)hostName;
+- (SCNetworkReachabilityRef)reachabilityRefForAddress:(NSString *)address;
+- (BOOL)addressFromString:(NSString *)IPAddress address:(struct sockaddr_in *)outAddress;
+- (void)stopListeningForReachabilityChanges;
+@end
+
+@implementation Reachability
+
+@synthesize networkStatusNotificationsEnabled = _networkStatusNotificationsEnabled;
+@synthesize hostName = _hostName;
+@synthesize address = _address;
+@synthesize reachabilityQueries = _reachabilityQueries;
+
++ (Reachability *)sharedReachability
+{
+ if (!_sharedReachability) {
+ _sharedReachability = [[Reachability alloc] init];
+ // Clients of Reachability will typically call [[Reachability sharedReachability] setHostName:]
+ // before calling one of the status methods.
+ _sharedReachability.hostName = nil;
+ _sharedReachability.address = nil;
+ _sharedReachability.networkStatusNotificationsEnabled = NO;
+ _sharedReachability.reachabilityQueries = [[NSMutableDictionary alloc] init];
+ }
+ return _sharedReachability;
+}
+
+- (void) dealloc
+{
+ [self stopListeningForReachabilityChanges];
+
+ [_sharedReachability.reachabilityQueries release];
+ [_sharedReachability release];
+ [super dealloc];
+}
+
+- (BOOL)isReachableWithoutRequiringConnection:(SCNetworkReachabilityFlags)flags
+{
+ // kSCNetworkReachabilityFlagsReachable indicates that the specified nodename or address can
+ // be reached using the current network configuration.
+ BOOL isReachable = flags & kSCNetworkReachabilityFlagsReachable;
+
+ // This flag indicates that the specified nodename or address can
+ // be reached using the current network configuration, but a
+ // connection must first be established.
+ //
+ // If the flag is false, we don't have a connection. But because CFNetwork
+ // automatically attempts to bring up a WWAN connection, if the WWAN reachability
+ // flag is present, a connection is not required.
+ BOOL noConnectionRequired = !(flags & kSCNetworkReachabilityFlagsConnectionRequired);
+ if ((flags & kSCNetworkReachabilityFlagsIsWWAN)) {
+ noConnectionRequired = YES;
+ }
+
+ return (isReachable && noConnectionRequired) ? YES : NO;
+}
+
+// Returns whether or not the current host name is reachable with the current network configuration.
+- (BOOL)isHostReachable:(NSString *)host
+{
+ if (!host || ![host length]) {
+ return NO;
+ }
+
+ SCNetworkReachabilityFlags flags;
+ SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [host UTF8String]);
+ BOOL gotFlags = SCNetworkReachabilityGetFlags(reachability, &flags);
+
+ CFRelease(reachability);
+
+ if (!gotFlags) {
+ return NO;
+ }
+
+ return [self isReachableWithoutRequiringConnection:flags];
+}
+
+// This returns YES if the address 169.254.0.0 is reachable without requiring a connection.
+- (BOOL)isAdHocWiFiNetworkAvailableFlags:(SCNetworkReachabilityFlags *)outFlags
+{
+ // Look in the cache of reachability queries for one that matches this query.
+ ReachabilityQuery *query = [self.reachabilityQueries objectForKey:kLinkLocalAddressKey];
+ SCNetworkReachabilityRef adHocWiFiNetworkReachability = query.reachabilityRef;
+
+ // If a cached reachability query was not found, create one.
+ if (!adHocWiFiNetworkReachability) {
+
+ // Build a sockaddr_in that we can pass to the address reachability query.
+ struct sockaddr_in sin;
+
+ bzero(&sin, sizeof(sin));
+ sin.sin_len = sizeof(sin);
+ sin.sin_family = AF_INET;
+ // IN_LINKLOCALNETNUM is defined in <netinet/in.h> as 169.254.0.0
+ sin.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM);
+
+ adHocWiFiNetworkReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&sin);
+
+ query = [[[ReachabilityQuery alloc] init] autorelease];
+ query.hostNameOrAddress = kLinkLocalAddressKey;
+ query.reachabilityRef = adHocWiFiNetworkReachability;
+
+ // Add the reachability query to the cache.
+ [self.reachabilityQueries setObject:query forKey:kLinkLocalAddressKey];
+ }
+
+ // If necessary, register for notifcations for the SCNetworkReachabilityRef on the current run loop.
+ // If an existing SCNetworkReachabilityRef was found in the cache, we can reuse it and register
+ // to receive notifications from it in the current run loop, which may be different than the run loop
+ // that was previously used when registering the SCNetworkReachabilityRef for notifications.
+ // -scheduleOnRunLoop: will schedule only if network status notifications are enabled in the Reachability instance.
+ // By default, they are not enabled.
+ [query scheduleOnRunLoop:[NSRunLoop currentRunLoop]];
+
+ SCNetworkReachabilityFlags addressReachabilityFlags;
+ BOOL gotFlags = SCNetworkReachabilityGetFlags(adHocWiFiNetworkReachability, &addressReachabilityFlags);
+ if (!gotFlags) {
+ // There was an error getting the reachability flags.
+ return NO;
+ }
+
+ // Callers of this method might want to use the reachability flags, so if an 'out' parameter
+ // was passed in, assign the reachability flags to it.
+ if (outFlags) {
+ *outFlags = addressReachabilityFlags;
+ }
+
+ return [self isReachableWithoutRequiringConnection:addressReachabilityFlags];
+}
+
+// ReachabilityCallback is registered as the callback for network state changes in startListeningForReachabilityChanges.
+static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ // Post a notification to notify the client that the network reachability changed.
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"kNetworkReachabilityChangedNotification" object:nil];
+
+ [pool release];
+}
+
+// Perform a reachability query for the address 0.0.0.0. If that address is reachable without
+// requiring a connection, a network interface is available. We'll have to do more work to
+// determine which network interface is available.
+- (BOOL)isNetworkAvailableFlags:(SCNetworkReachabilityFlags *)outFlags
+{
+ ReachabilityQuery *query = [self.reachabilityQueries objectForKey:kDefaultRouteKey];
+ SCNetworkReachabilityRef defaultRouteReachability = query.reachabilityRef;
+
+ // If a cached reachability query was not found, create one.
+ if (!defaultRouteReachability) {
+
+ struct sockaddr_in zeroAddress;
+ bzero(&zeroAddress, sizeof(zeroAddress));
+ zeroAddress.sin_len = sizeof(zeroAddress);
+ zeroAddress.sin_family = AF_INET;
+
+ defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
+
+ ReachabilityQuery *query = [[[ReachabilityQuery alloc] init] autorelease];
+ query.hostNameOrAddress = kDefaultRouteKey;
+ query.reachabilityRef = defaultRouteReachability;
+
+ [self.reachabilityQueries setObject:query forKey:kDefaultRouteKey];
+ }
+
+ // If necessary, register for notifcations for the SCNetworkReachabilityRef on the current run loop.
+ // If an existing SCNetworkReachabilityRef was found in the cache, we can reuse it and register
+ // to receive notifications from it in the current run loop, which may be different than the run loop
+ // that was previously used when registering the SCNetworkReachabilityRef for notifications.
+ // -scheduleOnRunLoop: will schedule only if network status notifications are enabled in the Reachability instance.
+ // By default, they are not enabled.
+ [query scheduleOnRunLoop:[NSRunLoop currentRunLoop]];
+
+ SCNetworkReachabilityFlags flags;
+ BOOL gotFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
+ if (!gotFlags) {
+ return NO;
+ }
+
+ BOOL isReachable = [self isReachableWithoutRequiringConnection:flags];
+
+ // Callers of this method might want to use the reachability flags, so if an 'out' parameter
+ // was passed in, assign the reachability flags to it.
+ if (outFlags) {
+ *outFlags = flags;
+ }
+
+ return isReachable;
+}
+
+// Be a good citizen and unregister for network state changes when the application terminates.
+- (void)stopListeningForReachabilityChanges
+{
+ // Walk through the cache that holds SCNetworkReachabilityRefs for reachability
+ // queries to particular hosts or addresses.
+ NSEnumerator *enumerator = [self.reachabilityQueries objectEnumerator];
+ ReachabilityQuery *reachabilityQuery;
+
+ while (reachabilityQuery = [enumerator nextObject]) {
+
+ CFArrayRef runLoops = reachabilityQuery.runLoops;
+ NSUInteger runLoopCounter, maxRunLoops = CFArrayGetCount(runLoops);
+
+ for (runLoopCounter = 0; runLoopCounter < maxRunLoops; runLoopCounter++) {
+ CFRunLoopRef nextRunLoop = (CFRunLoopRef)CFArrayGetValueAtIndex(runLoops, runLoopCounter);
+
+ SCNetworkReachabilityUnscheduleFromRunLoop(reachabilityQuery.reachabilityRef, nextRunLoop, kCFRunLoopDefaultMode);
+ }
+
+ CFArrayRemoveAllValues(reachabilityQuery.runLoops);
+ }
+}
+
+/*
+ Create a SCNetworkReachabilityRef for hostName, which lets us determine if hostName
+ is currently reachable, and lets us register to receive notifications when the
+ reachability of hostName changes.
+ */
+- (SCNetworkReachabilityRef)reachabilityRefForHostName:(NSString *)hostName
+{
+ if (!hostName || ![hostName length]) {
+ return NULL;
+ }
+
+ // Look in the cache for an existing SCNetworkReachabilityRef for hostName.
+ ReachabilityQuery *cachedQuery = [self.reachabilityQueries objectForKey:hostName];
+ SCNetworkReachabilityRef reachabilityRefForHostName = cachedQuery.reachabilityRef;
+
+ if (reachabilityRefForHostName) {
+ return reachabilityRefForHostName;
+ }
+
+ // Didn't find an existing SCNetworkReachabilityRef for hostName, so create one ...
+ reachabilityRefForHostName = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [hostName UTF8String]);
+
+ NSAssert1(reachabilityRefForHostName != NULL, @"Failed to create SCNetworkReachabilityRef for host: %@", hostName);
+
+ ReachabilityQuery *query = [[[ReachabilityQuery alloc] init] autorelease];
+ query.hostNameOrAddress = hostName;
+ query.reachabilityRef = reachabilityRefForHostName;
+
+ // If necessary, register for notifcations for the SCNetworkReachabilityRef on the current run loop.
+ // If an existing SCNetworkReachabilityRef was found in the cache, we can reuse it and register
+ // to receive notifications from it in the current run loop, which may be different than the run loop
+ // that was previously used when registering the SCNetworkReachabilityRef for notifications.
+ // -scheduleOnRunLoop: will schedule only if network status notifications are enabled in the Reachability instance.
+ // By default, they are not enabled.
+ [query scheduleOnRunLoop:[NSRunLoop currentRunLoop]];
+
+ // ... and add it to the cache.
+ [self.reachabilityQueries setObject:query forKey:hostName];
+ return reachabilityRefForHostName;
+}
+
+/*
+ Create a SCNetworkReachabilityRef for the IP address in addressString, which lets us determine if
+ the address is currently reachable, and lets us register to receive notifications when the
+ reachability of the address changes.
+ */
+- (SCNetworkReachabilityRef)reachabilityRefForAddress:(NSString *)addressString
+{
+ if (!addressString || ![addressString length]) {
+ return NULL;
+ }
+
+ struct sockaddr_in address;
+
+ BOOL gotAddress = [self addressFromString:addressString address:&address];
+ if (!gotAddress) {
+ // The attempt to convert addressString to a sockaddr_in failed.
+ NSAssert1(gotAddress != NO, @"Failed to convert an IP address string to a sockaddr_in: %@", addressString);
+ return NULL;
+ }
+
+ // Look in the cache for an existing SCNetworkReachabilityRef for addressString.
+ ReachabilityQuery *cachedQuery = [self.reachabilityQueries objectForKey:addressString];
+ SCNetworkReachabilityRef reachabilityRefForAddress = cachedQuery.reachabilityRef;
+
+ if (reachabilityRefForAddress) {
+ return reachabilityRefForAddress;
+ }
+
+ // Didn't find an existing SCNetworkReachabilityRef for addressString, so create one.
+ reachabilityRefForAddress = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (struct sockaddr *)&address);
+
+ NSAssert1(reachabilityRefForAddress != NULL, @"Failed to create SCNetworkReachabilityRef for address: %@", addressString);
+
+ ReachabilityQuery *query = [[[ReachabilityQuery alloc] init] autorelease];
+ query.hostNameOrAddress = addressString;
+ query.reachabilityRef = reachabilityRefForAddress;
+
+ // If necessary, register for notifcations for the SCNetworkReachabilityRef on the current run loop.
+ // If an existing SCNetworkReachabilityRef was found in the cache, we can reuse it and register
+ // to receive notifications from it in the current run loop, which may be different than the run loop
+ // that was previously used when registering the SCNetworkReachabilityRef for notifications.
+ // -scheduleOnRunLoop: will schedule only if network status notifications are enabled in the Reachability instance.
+ // By default, they are not enabled.
+ [query scheduleOnRunLoop:[NSRunLoop currentRunLoop]];
+
+ // ... and add it to the cache.
+ [self.reachabilityQueries setObject:query forKey:addressString];
+ return reachabilityRefForAddress;
+}
+
+- (NetworkStatus)remoteHostStatus
+{
+ /*
+ If the current host name or address is reachable, determine which network interface it is reachable through.
+ If the host is reachable and the reachability flags include kSCNetworkReachabilityFlagsIsWWAN, it
+ is reachable through the carrier data network. If the host is reachable and the reachability
+ flags do not include kSCNetworkReachabilityFlagsIsWWAN, it is reachable through the WiFi network.
+ */
+
+ SCNetworkReachabilityRef reachabilityRef = nil;
+ if (self.hostName) {
+ reachabilityRef = [self reachabilityRefForHostName:self.hostName];
+
+ } else if (self.address) {
+ reachabilityRef = [self reachabilityRefForAddress:self.address];
+
+ } else {
+ NSAssert(self.hostName != nil && self.address != nil, @"No hostName or address specified. Cannot determine reachability.");
+ return NotReachable;
+ }
+
+ if (!reachabilityRef) {
+ return NotReachable;
+ }
+
+ SCNetworkReachabilityFlags reachabilityFlags;
+ BOOL gotFlags = SCNetworkReachabilityGetFlags(reachabilityRef, &reachabilityFlags);
+ if (!gotFlags) {
+ return NotReachable;
+ }
+
+ BOOL reachable = [self isReachableWithoutRequiringConnection:reachabilityFlags];
+
+ if (!reachable) {
+ return NotReachable;
+ }
+ if (reachabilityFlags & ReachableViaCarrierDataNetwork) {
+ return ReachableViaCarrierDataNetwork;
+ }
+
+ return ReachableViaWiFiNetwork;
+}
+
+- (NetworkStatus)internetConnectionStatus
+{
+ /*
+ To determine if the device has an Internet connection, query the address
+ 0.0.0.0. If it's reachable without requiring a connection, first check
+ for the kSCNetworkReachabilityFlagsIsDirect flag, which tell us if the connection
+ is to an ad-hoc WiFi network. If it is not, the device can access the Internet.
+ The next thing to determine is how the device can access the Internet, which
+ can either be through the carrier data network (EDGE or other service) or through
+ a WiFi connection.
+
+ Note: Knowing that the device has an Internet connection is not the same as
+ knowing if the device can reach a particular host. To know that, use
+ -[Reachability remoteHostStatus].
+ */
+
+ SCNetworkReachabilityFlags defaultRouteFlags;
+ BOOL defaultRouteIsAvailable = [self isNetworkAvailableFlags:&defaultRouteFlags];
+ if (defaultRouteIsAvailable) {
+
+ if (defaultRouteFlags & kSCNetworkReachabilityFlagsIsDirect) {
+
+ // The connection is to an ad-hoc WiFi network, so Internet access is not available.
+ return NotReachable;
+ }
+ else if (defaultRouteFlags & ReachableViaCarrierDataNetwork) {
+ return ReachableViaCarrierDataNetwork;
+ }
+
+ return ReachableViaWiFiNetwork;
+ }
+
+ return NotReachable;
+}
+
+- (NetworkStatus)localWiFiConnectionStatus
+{
+ SCNetworkReachabilityFlags selfAssignedAddressFlags;
+
+ /*
+ To determine if the WiFi connection is to a local ad-hoc network,
+ check the availability of the address 169.254.x.x. That's an address
+ in the self-assigned range, and the device will have a self-assigned IP
+ when it's connected to a ad-hoc WiFi network. So to test if the device
+ has a self-assigned IP, look for the kSCNetworkReachabilityFlagsIsDirect flag
+ in the address query. If it's present, we know that the WiFi connection
+ is to an ad-hoc network.
+ */
+ // This returns YES if the address 169.254.0.0 is reachable without requiring a connection.
+ BOOL hasLinkLocalNetworkAccess = [self isAdHocWiFiNetworkAvailableFlags:&selfAssignedAddressFlags];
+
+ if (hasLinkLocalNetworkAccess && (selfAssignedAddressFlags & kSCNetworkReachabilityFlagsIsDirect)) {
+ return ReachableViaWiFiNetwork;
+ }
+
+ return NotReachable;
+}
+
+// Convert an IP address from an NSString to a sockaddr_in * that can be used to create
+// the reachability request.
+- (BOOL)addressFromString:(NSString *)IPAddress address:(struct sockaddr_in *)address
+{
+ if (!IPAddress || ![IPAddress length]) {
+ return NO;
+ }
+
+ memset((char *) address, sizeof(struct sockaddr_in), 0);
+ address->sin_family = AF_INET;
+ address->sin_len = sizeof(struct sockaddr_in);
+
+ int conversionResult = inet_aton([IPAddress UTF8String], &address->sin_addr);
+ if (conversionResult == 0) {
+ NSAssert1(conversionResult != 1, @"Failed to convert the IP address string into a sockaddr_in: %@", IPAddress);
+ return NO;
+ }
+
+ return YES;
+}
+
+@end
+
+@interface ReachabilityQuery ()
+- (CFRunLoopRef)startListeningForReachabilityChanges:(SCNetworkReachabilityRef)reachability onRunLoop:(CFRunLoopRef)runLoop;
+@end
+
+@implementation ReachabilityQuery
+
+@synthesize reachabilityRef = _reachabilityRef;
+@synthesize runLoops = _runLoops;
+@synthesize hostNameOrAddress = _hostNameOrAddress;
+
+- (id)init
+{
+ self = [super init];
+ if (self != nil) {
+ self.runLoops = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ CFRelease(self.runLoops);
+ [super dealloc];
+}
+
+- (BOOL)isScheduledOnRunLoop:(CFRunLoopRef)runLoop
+{
+ NSUInteger runLoopCounter, maxRunLoops = CFArrayGetCount(self.runLoops);
+
+ for (runLoopCounter = 0; runLoopCounter < maxRunLoops; runLoopCounter++) {
+ CFRunLoopRef nextRunLoop = (CFRunLoopRef)CFArrayGetValueAtIndex(self.runLoops, runLoopCounter);
+
+ if (nextRunLoop == runLoop) {
+ return YES;
+ }
+ }
+
+ return NO;
+}
+
+- (void)scheduleOnRunLoop:(NSRunLoop *)inRunLoop
+{
+ // Only register for network state changes if the client has specifically enabled them.
+ if ([[Reachability sharedReachability] networkStatusNotificationsEnabled] == NO) {
+ return;
+ }
+
+ if (!inRunLoop) {
+ return;
+ }
+
+ CFRunLoopRef runLoop = [inRunLoop getCFRunLoop];
+
+ // Notifications of status changes for each reachability query can be scheduled on multiple run loops.
+ // To support that, register for notifications for each runLoop.
+ // -isScheduledOnRunLoop: iterates over all of the run loops that have previously been used
+ // to register for notifications. If one is found that matches the passed in runLoop argument, there's
+ // no need to register for notifications again. If one is not found, register for notifications
+ // using the current runLoop.
+ if (![self isScheduledOnRunLoop:runLoop]) {
+
+ CFRunLoopRef notificationRunLoop = [self startListeningForReachabilityChanges:self.reachabilityRef onRunLoop:runLoop];
+ if (notificationRunLoop) {
+ CFArrayAppendValue(self.runLoops, notificationRunLoop);
+ }
+ }
+}
+
+// Register to receive changes to the 'reachability' query so that we can update the
+// user interface when the network state changes.
+- (CFRunLoopRef)startListeningForReachabilityChanges:(SCNetworkReachabilityRef)reachability onRunLoop:(CFRunLoopRef)runLoop
+{
+ if (!reachability) {
+ return NULL;
+ }
+
+ if (!runLoop) {
+ return NULL;
+ }
+
+ SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
+ SCNetworkReachabilitySetCallback(reachability, ReachabilityCallback, &context);
+ SCNetworkReachabilityScheduleWithRunLoop(reachability, runLoop, kCFRunLoopDefaultMode);
+
+ return runLoop;
+}
+
+
+@end
diff --git a/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.mode1v3 b/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.mode1v3
index de5043c50..cca3ba199 100644
--- a/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.mode1v3
+++ b/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.mode1v3
@@ -269,20 +269,22 @@
<string>080E96DDFE201D6D7F000001</string>
<string>342F98AD0E951731006935E9</string>
<string>29B97317FDCFA39411CA2CEA</string>
+ <string>29B97323FDCFA39411CA2CEA</string>
<string>19C28FACFE9D520D11CA2CBB</string>
<string>1C37FBAC04509CD000000102</string>
+ <string>1C08E77C0454961000C914BD</string>
<string>1C37FABC05509CD000000102</string>
<string>E2644B35053B69B200211256</string>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
- <integer>41</integer>
- <integer>40</integer>
+ <integer>53</integer>
+ <integer>51</integer>
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
- <string>{{0, 0}, {243, 948}}</string>
+ <string>{{0, 174}, {243, 948}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@@ -321,7 +323,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20306471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
- <string>EditSubjectViewController.m</string>
+ <string>FixMyStreetAppDelegate.m</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@@ -329,19 +331,70 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20406471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
- <string>EditSubjectViewController.m</string>
+ <string>FixMyStreetAppDelegate.m</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>34B318D00ECB8055000AD487</string>
+ <string>3442AADE0EE58B6A000B191D</string>
<key>history</key>
<array>
- <string>34B318C60ECB8036000AD487</string>
- <string>34B318CF0ECB8055000AD487</string>
+ <string>342592FC0EE4665E009430B7</string>
+ <string>342592FD0EE4665E009430B7</string>
+ <string>342592FE0EE4665E009430B7</string>
+ <string>3442AA940EE578F6000B191D</string>
+ <string>3442AAA80EE58AA8000B191D</string>
+ <string>3442AAAC0EE58AA8000B191D</string>
+ <string>3442AAD60EE58B6A000B191D</string>
+ <string>3442AAD70EE58B6A000B191D</string>
+ <string>3442AAD80EE58B6A000B191D</string>
+ <string>3442AAD90EE58B6A000B191D</string>
+ <string>3442AAAD0EE58AA8000B191D</string>
</array>
<key>prevStack</key>
<array>
- <string>34B318C80ECB8036000AD487</string>
+ <string>346099BC0ED46D9500B731FF</string>
+ <string>342593010EE4665E009430B7</string>
+ <string>342593020EE4665E009430B7</string>
+ <string>342593030EE4665E009430B7</string>
+ <string>342593040EE4665E009430B7</string>
+ <string>3442AA400EE576E1000B191D</string>
+ <string>3442AA410EE576E1000B191D</string>
+ <string>3442AA500EE577C7000B191D</string>
+ <string>3442AA510EE577C7000B191D</string>
+ <string>3442AA520EE577C7000B191D</string>
+ <string>3442AA530EE577C7000B191D</string>
+ <string>3442AA950EE578F6000B191D</string>
+ <string>3442AAAE0EE58AA8000B191D</string>
+ <string>3442AAAF0EE58AA8000B191D</string>
+ <string>3442AAB00EE58AA8000B191D</string>
+ <string>3442AAB10EE58AA8000B191D</string>
+ <string>3442AAB20EE58AA8000B191D</string>
+ <string>3442AAB30EE58AA8000B191D</string>
+ <string>3442AAB40EE58AA8000B191D</string>
+ <string>3442AAB50EE58AA8000B191D</string>
+ <string>3442AAB60EE58AA8000B191D</string>
+ <string>3442AAB70EE58AA8000B191D</string>
+ <string>3442AAB80EE58AA8000B191D</string>
+ <string>3442AAB90EE58AA8000B191D</string>
+ <string>3442AABA0EE58AA8000B191D</string>
+ <string>3442AABB0EE58AA8000B191D</string>
+ <string>3442AABC0EE58AA8000B191D</string>
+ <string>3442AABD0EE58AA8000B191D</string>
+ <string>3442AABE0EE58AA8000B191D</string>
+ <string>3442AABF0EE58AA8000B191D</string>
+ <string>3442AAC00EE58AA8000B191D</string>
+ <string>3442AAC10EE58AA8000B191D</string>
+ <string>3442AAC20EE58AA8000B191D</string>
+ <string>3442AAC30EE58AA8000B191D</string>
+ <string>3442AAC40EE58AA8000B191D</string>
+ <string>3442AAC50EE58AA8000B191D</string>
+ <string>3442AAC60EE58AA8000B191D</string>
+ <string>3442AAC70EE58AA8000B191D</string>
+ <string>3442AAC80EE58AA8000B191D</string>
+ <string>3442AADA0EE58B6A000B191D</string>
+ <string>3442AADB0EE58B6A000B191D</string>
+ <string>3442AADC0EE58B6A000B191D</string>
+ <string>3442AADD0EE58B6A000B191D</string>
</array>
</dict>
<key>SplitCount</key>
@@ -399,9 +452,9 @@
</array>
<key>TableOfContents</key>
<array>
- <string>34B318B80ECB7EDB000AD487</string>
+ <string>3442AA130EE56513000B191D</string>
<string>1CE0B1FE06471DED0097A5F4</string>
- <string>34B318B90ECB7EDB000AD487</string>
+ <string>3442AA140EE56513000B191D</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@@ -535,6 +588,8 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
+ <string>1C530D57069F1CE1000CFCEE</string>
+ <string>1C78EAAD065D492600B07095</string>
<string>3477106F0E8BD7BA0051DFFD</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>/Users/matthew/Projects/mySociety/iPhone/FixMyStreet/FixMyStreet.xcodeproj</string>
@@ -570,7 +625,7 @@
<key>Frame</key>
<string>{{0, 0}, {876, 236}}</string>
<key>RubberWindowFrame</key>
- <string>520 292 876 600 0 0 1920 1178 </string>
+ <string>542 318 876 600 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@@ -598,7 +653,7 @@
<key>Frame</key>
<string>{{0, 241}, {876, 318}}</string>
<key>RubberWindowFrame</key>
- <string>520 292 876 600 0 0 1920 1178 </string>
+ <string>542 318 876 600 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@@ -621,14 +676,14 @@
<key>TableOfContents</key>
<array>
<string>3477106F0E8BD7BA0051DFFD</string>
- <string>34B318BA0ECB7EDB000AD487</string>
+ <string>3442AA470EE576F9000B191D</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.buildV3</string>
<key>WindowString</key>
- <string>520 292 876 600 0 0 1920 1178 </string>
+ <string>542 318 876 600 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>3477106F0E8BD7BA0051DFFD</string>
<key>WindowToolIsVisible</key>
@@ -741,13 +796,13 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
- <string>34B318BB0ECB7EDB000AD487</string>
+ <string>3442AA150EE56513000B191D</string>
<string>1C162984064C10D400B95A72</string>
- <string>34B318BC0ECB7EDB000AD487</string>
- <string>34B318BD0ECB7EDB000AD487</string>
- <string>34B318BE0ECB7EDB000AD487</string>
- <string>34B318BF0ECB7EDB000AD487</string>
- <string>34B318C00ECB7EDB000AD487</string>
+ <string>3442AA160EE56513000B191D</string>
+ <string>3442AA170EE56513000B191D</string>
+ <string>3442AA180EE56513000B191D</string>
+ <string>3442AA190EE56513000B191D</string>
+ <string>3442AA1A0EE56513000B191D</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
@@ -781,7 +836,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CDD528C0622207200134675</string>
<key>PBXProjectModuleLabel</key>
- <string>SettingsViewController.m</string>
+ <string>InputTableViewController.m</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
@@ -837,8 +892,8 @@
<key>TableOfContents</key>
<array>
<string>1C530D57069F1CE1000CFCEE</string>
- <string>34D15B6F0EB7306000741406</string>
- <string>34D15B700EB7306000741406</string>
+ <string>3442AA9E0EE58992000B191D</string>
+ <string>3442AA9F0EE58992000B191D</string>
<string>1CDD528C0622207200134675</string>
<string>1CD0528E0623707200166675</string>
</array>
@@ -901,7 +956,7 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
- <string>3410B70A0ECB793300F84035</string>
+ <string>3442AA970EE578F6000B191D</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
diff --git a/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.pbxuser b/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.pbxuser
index d2c2c1c69..5ee2b4fde 100644
--- a/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.pbxuser
+++ b/iphone/FixMyStreet/FixMyStreet.xcodeproj/matthew.pbxuser
@@ -10,9 +10,9 @@
};
1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1229, 3038}}";
- sepNavSelRange = "{6061, 0}";
- sepNavVisRange = "{4725, 3105}";
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 3248}}";
+ sepNavSelRange = "{6036, 0}";
+ sepNavVisRange = "{4319, 2853}";
sepNavWindowFrame = "{{130, 510}, {750, 558}}";
};
};
@@ -25,7 +25,7 @@
29B97313FDCFA39411CA2CEA /* Project object */ = {
activeBuildConfigurationName = Debug;
activeExecutable = 347710680E8BD7AA0051DFFD /* FixMyStreet */;
- activeSDKPreference = iphonesimulator2.1;
+ activeSDKPreference = iphonesimulator2.0;
activeTarget = 1D6058900D05DD3D006BFB54 /* FixMyStreet */;
addToTargets = (
1D6058900D05DD3D006BFB54 /* FixMyStreet */,
@@ -64,13 +64,27 @@
PBXBreakpointsDataSource_ContinueID,
);
};
+ PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = {
+ PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+ PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID;
+ PBXFileTableDataSourceColumnWidthsKey = (
+ 200,
+ 200,
+ 861,
+ );
+ PBXFileTableDataSourceColumnsKey = (
+ PBXBookmarksDataSource_LocationID,
+ PBXBookmarksDataSource_NameID,
+ PBXBookmarksDataSource_CommentsID,
+ );
+ };
PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
300,
- 548,
+ 941,
);
PBXFileTableDataSourceColumnsKey = (
PBXErrorsWarningsDataSource_TypeID,
@@ -162,22 +176,88 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 248217288;
- PBXWorkspaceStateSaveDate = 248217288;
+ PBXPerProjectTemplateStateSaveDate = 249914630;
+ PBXWorkspaceStateSaveDate = 249914630;
};
perUserProjectItems = {
- 3410B70B0ECB7DF800F84035 = 3410B70B0ECB7DF800F84035 /* PBXTextBookmark */;
- 3410B70D0ECB7DF800F84035 = 3410B70D0ECB7DF800F84035 /* PBXTextBookmark */;
- 3410B70E0ECB7DF800F84035 = 3410B70E0ECB7DF800F84035 /* PBXTextBookmark */;
- 34B318B70ECB7EDB000AD487 /* PBXTextBookmark */ = 34B318B70ECB7EDB000AD487 /* PBXTextBookmark */;
- 34B318C60ECB8036000AD487 /* PBXTextBookmark */ = 34B318C60ECB8036000AD487 /* PBXTextBookmark */;
- 34B318C70ECB8036000AD487 /* PBXBookmark */ = 34B318C70ECB8036000AD487 /* PBXBookmark */;
- 34B318C80ECB8036000AD487 /* PBXTextBookmark */ = 34B318C80ECB8036000AD487 /* PBXTextBookmark */;
- 34B318C90ECB8036000AD487 /* PBXTextBookmark */ = 34B318C90ECB8036000AD487 /* PBXTextBookmark */;
- 34B318CF0ECB8055000AD487 /* PBXTextBookmark */ = 34B318CF0ECB8055000AD487 /* PBXTextBookmark */;
- 34B318D00ECB8055000AD487 /* PBXTextBookmark */ = 34B318D00ECB8055000AD487 /* PBXTextBookmark */;
- 34BFCFF60ECB7E9C00325DF2 = 34BFCFF60ECB7E9C00325DF2 /* PBXTextBookmark */;
- 34BFD0060ECB7EBC00325DF2 = 34BFD0060ECB7EBC00325DF2 /* PBXTextBookmark */;
+ 342592FC0EE4665E009430B7 = 342592FC0EE4665E009430B7 /* PlistBookmark */;
+ 342592FD0EE4665E009430B7 = 342592FD0EE4665E009430B7 /* PBXBookmark */;
+ 342592FE0EE4665E009430B7 = 342592FE0EE4665E009430B7 /* PBXBookmark */;
+ 342592FF0EE4665E009430B7 = 342592FF0EE4665E009430B7 /* PBXBookmark */;
+ 342593000EE4665E009430B7 = 342593000EE4665E009430B7 /* PBXTextBookmark */;
+ 342593010EE4665E009430B7 = 342593010EE4665E009430B7 /* PlistBookmark */;
+ 342593020EE4665E009430B7 = 342593020EE4665E009430B7 /* PBXBookmark */;
+ 342593030EE4665E009430B7 = 342593030EE4665E009430B7 /* PBXBookmark */;
+ 342593040EE4665E009430B7 = 342593040EE4665E009430B7 /* PBXBookmark */;
+ 342593050EE4665E009430B7 = 342593050EE4665E009430B7 /* PBXBookmark */;
+ 342593060EE4665E009430B7 = 342593060EE4665E009430B7 /* PBXTextBookmark */;
+ 3442AA120EE56513000B191D /* PBXTextBookmark */ = 3442AA120EE56513000B191D /* PBXTextBookmark */;
+ 3442AA3E0EE576E1000B191D /* PBXTextBookmark */ = 3442AA3E0EE576E1000B191D /* PBXTextBookmark */;
+ 3442AA3F0EE576E1000B191D /* PBXTextBookmark */ = 3442AA3F0EE576E1000B191D /* PBXTextBookmark */;
+ 3442AA400EE576E1000B191D /* PBXTextBookmark */ = 3442AA400EE576E1000B191D /* PBXTextBookmark */;
+ 3442AA410EE576E1000B191D /* PBXTextBookmark */ = 3442AA410EE576E1000B191D /* PBXTextBookmark */;
+ 3442AA420EE576E1000B191D /* PBXTextBookmark */ = 3442AA420EE576E1000B191D /* PBXTextBookmark */;
+ 3442AA450EE576F9000B191D /* PBXTextBookmark */ = 3442AA450EE576F9000B191D /* PBXTextBookmark */;
+ 3442AA460EE576F9000B191D /* PBXTextBookmark */ = 3442AA460EE576F9000B191D /* PBXTextBookmark */;
+ 3442AA4D0EE577C7000B191D /* PBXTextBookmark */ = 3442AA4D0EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA4E0EE577C7000B191D /* PBXTextBookmark */ = 3442AA4E0EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA4F0EE577C7000B191D /* PBXTextBookmark */ = 3442AA4F0EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA500EE577C7000B191D /* PBXTextBookmark */ = 3442AA500EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA510EE577C7000B191D /* PBXTextBookmark */ = 3442AA510EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA520EE577C7000B191D /* PBXTextBookmark */ = 3442AA520EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA530EE577C7000B191D /* PBXTextBookmark */ = 3442AA530EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA540EE577C7000B191D /* PBXTextBookmark */ = 3442AA540EE577C7000B191D /* PBXTextBookmark */;
+ 3442AA940EE578F6000B191D /* PBXTextBookmark */ = 3442AA940EE578F6000B191D /* PBXTextBookmark */;
+ 3442AA950EE578F6000B191D /* PBXTextBookmark */ = 3442AA950EE578F6000B191D /* PBXTextBookmark */;
+ 3442AA960EE578F6000B191D /* PBXTextBookmark */ = 3442AA960EE578F6000B191D /* PBXTextBookmark */;
+ 3442AA990EE57914000B191D /* PBXTextBookmark */ = 3442AA990EE57914000B191D /* PBXTextBookmark */;
+ 3442AA9A0EE57922000B191D /* PBXTextBookmark */ = 3442AA9A0EE57922000B191D /* PBXTextBookmark */;
+ 3442AAA20EE58A03000B191D /* PBXTextBookmark */ = 3442AAA20EE58A03000B191D /* PBXTextBookmark */;
+ 3442AAA30EE58A03000B191D /* PBXTextBookmark */ = 3442AAA30EE58A03000B191D /* PBXTextBookmark */;
+ 3442AAA80EE58AA8000B191D /* PBXTextBookmark */ = 3442AAA80EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAA90EE58AA8000B191D /* PBXTextBookmark */ = 3442AAA90EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAAA0EE58AA8000B191D /* PBXTextBookmark */ = 3442AAAA0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAAB0EE58AA8000B191D /* PBXTextBookmark */ = 3442AAAB0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAAC0EE58AA8000B191D /* PBXBookmark */ = 3442AAAC0EE58AA8000B191D /* PBXBookmark */;
+ 3442AAAD0EE58AA8000B191D /* PBXTextBookmark */ = 3442AAAD0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAAE0EE58AA8000B191D /* PBXTextBookmark */ = 3442AAAE0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAAF0EE58AA8000B191D /* PBXTextBookmark */ = 3442AAAF0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB00EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB00EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB10EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB10EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB20EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB20EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB30EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB30EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB40EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB40EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB50EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB50EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB60EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB60EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB70EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB70EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB80EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB80EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAB90EE58AA8000B191D /* PBXTextBookmark */ = 3442AAB90EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AABA0EE58AA8000B191D /* PBXTextBookmark */ = 3442AABA0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AABB0EE58AA8000B191D /* PBXTextBookmark */ = 3442AABB0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AABC0EE58AA8000B191D /* PBXTextBookmark */ = 3442AABC0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AABD0EE58AA8000B191D /* PBXTextBookmark */ = 3442AABD0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AABE0EE58AA8000B191D /* PBXTextBookmark */ = 3442AABE0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AABF0EE58AA8000B191D /* PBXTextBookmark */ = 3442AABF0EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC00EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC00EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC10EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC10EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC20EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC20EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC30EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC30EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC40EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC40EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC50EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC50EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC60EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC60EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC70EE58AA8000B191D /* PBXBookmark */ = 3442AAC70EE58AA8000B191D /* PBXBookmark */;
+ 3442AAC80EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC80EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAC90EE58AA8000B191D /* PBXTextBookmark */ = 3442AAC90EE58AA8000B191D /* PBXTextBookmark */;
+ 3442AAD60EE58B6A000B191D /* PBXTextBookmark */ = 3442AAD60EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AAD70EE58B6A000B191D /* PBXTextBookmark */ = 3442AAD70EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AAD80EE58B6A000B191D /* PBXTextBookmark */ = 3442AAD80EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AAD90EE58B6A000B191D /* PBXTextBookmark */ = 3442AAD90EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AADA0EE58B6A000B191D /* PBXTextBookmark */ = 3442AADA0EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AADB0EE58B6A000B191D /* PBXTextBookmark */ = 3442AADB0EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AADC0EE58B6A000B191D /* PBXTextBookmark */ = 3442AADC0EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AADD0EE58B6A000B191D /* PBXTextBookmark */ = 3442AADD0EE58B6A000B191D /* PBXTextBookmark */;
+ 3442AADE0EE58B6A000B191D /* PBXTextBookmark */ = 3442AADE0EE58B6A000B191D /* PBXTextBookmark */;
+ 346099BC0ED46D9500B731FF = 346099BC0ED46D9500B731FF /* PBXTextBookmark */;
};
sourceControlManager = 347710780E8BD7BA0051DFFD /* Source Control */;
userBuildSettings = {
@@ -197,35 +277,734 @@
sepNavVisRange = "{0, 230}";
};
};
- 3410B70B0ECB7DF800F84035 /* PBXTextBookmark */ = {
+ 342592FC0EE4665E009430B7 /* PlistBookmark */ = {
+ isa = PlistBookmark;
+ fRef = 8D1107310486CEB800E47090 /* Info.plist */;
+ fallbackIsa = PBXBookmark;
+ isK = 0;
+ kPath = (
+ );
+ name = /Users/matthew/Projects/mySociety/iPhone/FixMyStreet/Info.plist;
+ rLen = 0;
+ rLoc = 2147483647;
+ };
+ 342592FD0EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 349A561E0ECB07DF0091BE4F /* Default.png */;
+ };
+ 342592FE0EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 34C17A530EB0C69700768D1C /* mysociety.png */;
+ };
+ 342592FF0EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 347710940E8BDA9B0051DFFD /* Icon.png */;
+ };
+ 342593000EE4665E009430B7 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 123";
+ rLen = 0;
+ rLoc = 6036;
+ rType = 0;
+ vrLen = 3253;
+ vrLoc = 4698;
+ };
+ 342593010EE4665E009430B7 /* PlistBookmark */ = {
+ isa = PlistBookmark;
+ fRef = 8D1107310486CEB800E47090 /* Info.plist */;
+ fallbackIsa = PBXBookmark;
+ isK = 0;
+ kPath = (
+ );
+ name = /Users/matthew/Projects/mySociety/iPhone/FixMyStreet/Info.plist;
+ rLen = 0;
+ rLoc = 2147483647;
+ };
+ 342593020EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 347710940E8BDA9B0051DFFD /* Icon.png */;
+ };
+ 342593030EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 349A561E0ECB07DF0091BE4F /* Default.png */;
+ };
+ 342593040EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 34C17A530EB0C69700768D1C /* mysociety.png */;
+ };
+ 342593050EE4665E009430B7 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 347710940E8BDA9B0051DFFD /* Icon.png */;
+ };
+ 342593060EE4665E009430B7 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 123";
+ rLen = 0;
+ rLoc = 6036;
+ rType = 0;
+ vrLen = 3298;
+ vrLoc = 8177;
+ };
+ 3442AA120EE56513000B191D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3481BD500EACF81D00C78F66 /* SettingsViewController.m */;
- name = "SettingsViewController.m: 167";
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 123";
+ rLen = 0;
+ rLoc = 6036;
+ rType = 0;
+ vrLen = 3298;
+ vrLoc = 8177;
+ };
+ 3442AA200EE575BA000B191D /* Reachability.h */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 1722}}";
+ sepNavSelRange = "{1145, 0}";
+ sepNavVisRange = "{0, 2564}";
+ };
+ };
+ 3442AA210EE575BA000B191D /* Reachability.m */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 8204}}";
+ sepNavSelRange = "{11113, 0}";
+ sepNavVisRange = "{10058, 2234}";
+ };
+ };
+ 3442AA3E0EE576E1000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2615;
+ vrLoc = 0;
+ };
+ 3442AA3F0EE576E1000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 123";
+ rLen = 0;
+ rLoc = 6036;
+ rType = 0;
+ vrLen = 3298;
+ vrLoc = 8177;
+ };
+ 3442AA400EE576E1000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 123";
+ rLen = 0;
+ rLoc = 6036;
+ rType = 0;
+ vrLen = 3298;
+ vrLoc = 8177;
+ };
+ 3442AA410EE576E1000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2615;
+ vrLoc = 0;
+ };
+ 3442AA420EE576E1000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 117";
+ rLen = 0;
+ rLoc = 5369;
+ rType = 0;
+ vrLen = 2653;
+ vrLoc = 4215;
+ };
+ 3442AA450EE576F9000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 117";
+ rLen = 0;
+ rLoc = 5369;
+ rType = 0;
+ vrLen = 2653;
+ vrLoc = 4215;
+ };
+ 3442AA460EE576F9000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 117";
+ rLen = 0;
+ rLoc = 5369;
+ rType = 0;
+ vrLen = 2653;
+ vrLoc = 4215;
+ };
+ 3442AA4D0EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 108";
+ rLen = 0;
+ rLoc = 4899;
+ rType = 0;
+ vrLen = 2667;
+ vrLoc = 4215;
+ };
+ 3442AA4E0EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2241;
+ vrLoc = 2803;
+ };
+ 3442AA4F0EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA210EE575BA000B191D /* Reachability.m */;
+ name = "Reachability.m: 416";
+ rLen = 13;
+ rLoc = 17772;
+ rType = 0;
+ vrLen = 2158;
+ vrLoc = 17625;
+ };
+ 3442AA500EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 117";
+ rLen = 0;
+ rLoc = 5369;
+ rType = 0;
+ vrLen = 2423;
+ vrLoc = 4215;
+ };
+ 3442AA510EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA210EE575BA000B191D /* Reachability.m */;
+ name = "Reachability.m: 416";
+ rLen = 13;
+ rLoc = 17772;
+ rType = 0;
+ vrLen = 2158;
+ vrLoc = 17625;
+ };
+ 3442AA520EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 108";
+ rLen = 0;
+ rLoc = 4899;
+ rType = 0;
+ vrLen = 2667;
+ vrLoc = 4215;
+ };
+ 3442AA530EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2241;
+ vrLoc = 2803;
+ };
+ 3442AA540EE577C7000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA210EE575BA000B191D /* Reachability.m */;
+ name = "Reachability.m: 260";
+ rLen = 7;
+ rLoc = 11241;
+ rType = 0;
+ vrLen = 2312;
+ vrLoc = 10058;
+ };
+ 3442AA940EE578F6000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA210EE575BA000B191D /* Reachability.m */;
+ name = "Reachability.m: 255";
+ rLen = 0;
+ rLoc = 11113;
+ rType = 0;
+ vrLen = 2234;
+ vrLoc = 10058;
+ };
+ 3442AA950EE578F6000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA210EE575BA000B191D /* Reachability.m */;
+ name = "Reachability.m: 255";
+ rLen = 0;
+ rLoc = 11113;
+ rType = 0;
+ vrLen = 2234;
+ vrLoc = 10058;
+ };
+ 3442AA960EE578F6000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 109";
+ rLen = 0;
+ rLoc = 5022;
+ rType = 0;
+ vrLen = 2437;
+ vrLoc = 4215;
+ };
+ 3442AA990EE57914000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 110";
+ rLen = 0;
+ rLoc = 5112;
+ rType = 0;
+ vrLen = 2441;
+ vrLoc = 4215;
+ };
+ 3442AA9A0EE57922000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 109";
+ rLen = 0;
+ rLoc = 5022;
+ rType = 0;
+ vrLen = 2441;
+ vrLoc = 4215;
+ };
+ 3442AAA20EE58A03000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ rLen = 8;
+ rLoc = 4951;
+ rType = 0;
+ };
+ 3442AAA30EE58A03000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 141";
+ rLen = 8;
+ rLoc = 4951;
+ rType = 0;
+ vrLen = 869;
+ vrLoc = 4486;
+ };
+ 3442AAA80EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712720E8D367F0051DFFD /* InputTableViewController.h */;
+ name = "InputTableViewController.h: 41";
+ rLen = 0;
+ rLoc = 1277;
+ rType = 0;
+ vrLen = 1307;
+ vrLoc = 0;
+ };
+ 3442AAA90EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 54";
+ rLen = 0;
+ rLoc = 2701;
+ rType = 0;
+ vrLen = 1946;
+ vrLoc = 1415;
+ };
+ 3442AAAA0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 279";
rLen = 6;
- rLoc = 5463;
+ rLoc = 9813;
rType = 0;
- vrLen = 1907;
- vrLoc = 4609;
+ vrLen = 2185;
+ vrLoc = 9035;
};
- 3410B70D0ECB7DF800F84035 /* PBXTextBookmark */ = {
+ 3442AAAB0EE58AA8000B191D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 32";
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 108";
rLen = 0;
- rLoc = 1011;
+ rLoc = 4200;
rType = 0;
- vrLen = 1673;
- vrLoc = 51;
+ vrLen = 2026;
+ vrLoc = 3533;
};
- 3410B70E0ECB7DF800F84035 /* PBXTextBookmark */ = {
+ 3442AAAC0EE58AA8000B191D /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 347710940E8BDA9B0051DFFD /* Icon.png */;
+ };
+ 3442AAAD0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 213";
+ rLen = 195;
+ rLoc = 11213;
+ rType = 0;
+ vrLen = 2642;
+ vrLoc = 9332;
+ };
+ 3442AAAE0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 107";
+ rLen = 0;
+ rLoc = 4883;
+ rType = 0;
+ vrLen = 2805;
+ vrLoc = 432;
+ };
+ 3442AAAF0EE58AA8000B191D /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3481BD500EACF81D00C78F66 /* SettingsViewController.m */;
- name = "SettingsViewController.m: 167";
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 54";
+ rLen = 0;
+ rLoc = 1686;
+ rType = 0;
+ vrLen = 1855;
+ vrLoc = 460;
+ };
+ 3442AAB00EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 126";
+ rLen = 0;
+ rLoc = 5054;
+ rType = 0;
+ vrLen = 1931;
+ vrLoc = 1415;
+ };
+ 3442AAB10EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 27";
+ rLen = 0;
+ rLoc = 1435;
+ rType = 0;
+ vrLen = 2010;
+ vrLoc = 1337;
+ };
+ 3442AAB20EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 126";
+ rLen = 0;
+ rLoc = 5054;
+ rType = 0;
+ vrLen = 1854;
+ vrLoc = 1492;
+ };
+ 3442AAB30EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 54";
+ rLen = 0;
+ rLoc = 1686;
+ rType = 0;
+ vrLen = 1855;
+ vrLoc = 460;
+ };
+ 3442AAB40EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 140";
+ rLen = 8;
+ rLoc = 5550;
+ rType = 0;
+ vrLen = 1822;
+ vrLoc = 4428;
+ };
+ 3442AAB50EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 293";
+ rLen = 11;
+ rLoc = 10403;
+ rType = 0;
+ vrLen = 2192;
+ vrLoc = 9684;
+ };
+ 3442AAB60EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 213";
+ rLen = 195;
+ rLoc = 11213;
+ rType = 0;
+ vrLen = 2642;
+ vrLoc = 9332;
+ };
+ 3442AAB70EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 292";
+ rLen = 0;
+ rLoc = 10377;
+ rType = 0;
+ vrLen = 2200;
+ vrLoc = 9684;
+ };
+ 3442AAB80EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712720E8D367F0051DFFD /* InputTableViewController.h */;
+ name = "InputTableViewController.h: 41";
+ rLen = 0;
+ rLoc = 1277;
+ rType = 0;
+ vrLen = 1307;
+ vrLoc = 0;
+ };
+ 3442AAB90EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 54";
+ rLen = 0;
+ rLoc = 2701;
+ rType = 0;
+ vrLen = 2098;
+ vrLoc = 1256;
+ };
+ 3442AABA0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 139";
+ rLen = 8;
+ rLoc = 5506;
+ rType = 0;
+ vrLen = 1982;
+ vrLoc = 3494;
+ };
+ 3442AABB0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 141";
+ rLen = 8;
+ rLoc = 4951;
+ rType = 0;
+ vrLen = 2136;
+ vrLoc = 3895;
+ };
+ 3442AABC0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 54";
+ rLen = 0;
+ rLoc = 2701;
+ rType = 0;
+ vrLen = 1799;
+ vrLoc = 1562;
+ };
+ 3442AABD0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 139";
+ rLen = 8;
+ rLoc = 5506;
+ rType = 0;
+ vrLen = 2111;
+ vrLoc = 3589;
+ };
+ 3442AABE0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 141";
+ rLen = 8;
+ rLoc = 4951;
+ rType = 0;
+ vrLen = 2270;
+ vrLoc = 6349;
+ };
+ 3442AABF0EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712720E8D367F0051DFFD /* InputTableViewController.h */;
+ name = "InputTableViewController.h: 41";
+ rLen = 0;
+ rLoc = 1277;
+ rType = 0;
+ vrLen = 1307;
+ vrLoc = 0;
+ };
+ 3442AAC00EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 114";
+ rLen = 0;
+ rLoc = 4515;
+ rType = 0;
+ vrLen = 2030;
+ vrLoc = 3533;
+ };
+ 3442AAC10EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 141";
+ rLen = 8;
+ rLoc = 4951;
+ rType = 0;
+ vrLen = 2268;
+ vrLoc = 6349;
+ };
+ 3442AAC20EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 114";
+ rLen = 65;
+ rLoc = 4512;
+ rType = 0;
+ vrLen = 1979;
+ vrLoc = 3533;
+ };
+ 3442AAC30EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 54";
+ rLen = 0;
+ rLoc = 2701;
+ rType = 0;
+ vrLen = 1946;
+ vrLoc = 1415;
+ };
+ 3442AAC40EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 114";
+ rLen = 65;
+ rLoc = 4512;
+ rType = 0;
+ vrLen = 1979;
+ vrLoc = 3533;
+ };
+ 3442AAC50EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 279";
+ rLen = 6;
+ rLoc = 9813;
+ rType = 0;
+ vrLen = 2185;
+ vrLoc = 9035;
+ };
+ 3442AAC60EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 108";
+ rLen = 0;
+ rLoc = 4200;
+ rType = 0;
+ vrLen = 2026;
+ vrLoc = 3533;
+ };
+ 3442AAC70EE58AA8000B191D /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 347710940E8BDA9B0051DFFD /* Icon.png */;
+ };
+ 3442AAC80EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 213";
+ rLen = 195;
+ rLoc = 11213;
+ rType = 0;
+ vrLen = 2642;
+ vrLoc = 9332;
+ };
+ 3442AAC90EE58AA8000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2564;
+ vrLoc = 0;
+ };
+ 3442AAD60EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2564;
+ vrLoc = 0;
+ };
+ 3442AAD70EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 108";
+ rLen = 0;
+ rLoc = 4200;
+ rType = 0;
+ vrLen = 2026;
+ vrLoc = 3533;
+ };
+ 3442AAD80EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 54";
+ rLen = 0;
+ rLoc = 2701;
+ rType = 0;
+ vrLen = 1945;
+ vrLoc = 1415;
+ };
+ 3442AAD90EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 279";
rLen = 6;
- rLoc = 5463;
+ rLoc = 9813;
+ rType = 0;
+ vrLen = 2240;
+ vrLoc = 4906;
+ };
+ 3442AADA0EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3442AA200EE575BA000B191D /* Reachability.h */;
+ name = "Reachability.h: 23";
+ rLen = 0;
+ rLoc = 1145;
+ rType = 0;
+ vrLen = 2564;
+ vrLoc = 0;
+ };
+ 3442AADB0EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021C0E93CDA200D716CB /* MyCLController.m */;
+ name = "MyCLController.m: 108";
+ rLen = 0;
+ rLoc = 4200;
+ rType = 0;
+ vrLen = 2026;
+ vrLoc = 3533;
+ };
+ 3442AADC0EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347A021B0E93CDA200D716CB /* MyCLController.h */;
+ name = "MyCLController.h: 54";
+ rLen = 0;
+ rLoc = 2701;
+ rType = 0;
+ vrLen = 1945;
+ vrLoc = 1415;
+ };
+ 3442AADD0EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 347712730E8D367F0051DFFD /* InputTableViewController.m */;
+ name = "InputTableViewController.m: 279";
+ rLen = 6;
+ rLoc = 9813;
+ rType = 0;
+ vrLen = 2240;
+ vrLoc = 4906;
+ };
+ 3442AADE0EE58B6A000B191D /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 133";
+ rLen = 0;
+ rLoc = 6036;
rType = 0;
- vrLen = 1907;
- vrLoc = 4609;
+ vrLen = 2853;
+ vrLoc = 4319;
};
344E0D540E91440500483FD6 /* imageCell.h */ = {
uiCtxt = {
@@ -309,6 +1088,16 @@
modificationTime = 246888798.9999011;
state = 2;
};
+ 346099BC0ED46D9500B731FF /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */;
+ name = "FixMyStreetAppDelegate.m: 123";
+ rLen = 0;
+ rLoc = 6036;
+ rType = 0;
+ vrLen = 3253;
+ vrLoc = 4698;
+ };
347710680E8BD7AA0051DFFD /* FixMyStreet */ = {
isa = PBXExecutable;
activeArgIndices = (
@@ -351,33 +1140,33 @@
};
347712720E8D367F0051DFFD /* InputTableViewController.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1229, 756}}";
- sepNavSelRange = "{612, 0}";
- sepNavVisRange = "{0, 1299}";
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 753}}";
+ sepNavSelRange = "{1277, 0}";
+ sepNavVisRange = "{0, 1307}";
sepNavWindowFrame = "{{153, 489}, {750, 558}}";
};
};
347712730E8D367F0051DFFD /* InputTableViewController.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1229, 4760}}";
- sepNavSelRange = "{8842, 0}";
- sepNavVisRange = "{8672, 1722}";
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 4592}}";
+ sepNavSelRange = "{9813, 6}";
+ sepNavVisRange = "{4906, 2240}";
sepNavWindowFrame = "{{1082, 467}, {750, 558}}";
};
};
347A021B0E93CDA200D716CB /* MyCLController.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1229, 1148}}";
- sepNavSelRange = "{1435, 0}";
- sepNavVisRange = "{1337, 2015}";
+ sepNavSelRange = "{2701, 0}";
+ sepNavVisRange = "{1415, 1945}";
sepNavWindowFrame = "{{15, 94}, {738, 1079}}";
};
};
347A021C0E93CDA200D716CB /* MyCLController.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1229, 2520}}";
- sepNavSelRange = "{2695, 0}";
- sepNavVisRange = "{1912, 1673}";
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 2380}}";
+ sepNavSelRange = "{4200, 0}";
+ sepNavVisRange = "{3533, 2026}";
};
};
3481BD1F0EACEE3300C78F66 /* EditingTableViewCell.h */ = {
@@ -403,7 +1192,7 @@
};
3481BD500EACF81D00C78F66 /* SettingsViewController.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1229, 2814}}";
+ sepNavIntBoundsRect = "{{0, 0}, {1229, 2954}}";
sepNavSelRange = "{5463, 6}";
sepNavVisRange = "{4538, 1931}";
sepNavWindowFrame = "{{15, 94}, {738, 1079}}";
@@ -432,95 +1221,11 @@
349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1229, 1834}}";
- sepNavSelRange = "{337, 0}";
- sepNavVisRange = "{51, 1680}";
+ sepNavSelRange = "{271, 0}";
+ sepNavVisRange = "{0, 1607}";
sepNavWindowFrame = "{{61, 573}, {750, 558}}";
};
};
- 34B318B70ECB7EDB000AD487 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 11";
- rLen = 22;
- rLoc = 246;
- rType = 0;
- vrLen = 1680;
- vrLoc = 51;
- };
- 34B318C60ECB8036000AD487 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 3481BD500EACF81D00C78F66 /* SettingsViewController.m */;
- name = "SettingsViewController.m: 167";
- rLen = 6;
- rLoc = 5463;
- rType = 0;
- vrLen = 1931;
- vrLoc = 4538;
- };
- 34B318C70ECB8036000AD487 /* PBXBookmark */ = {
- isa = PBXBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- };
- 34B318C80ECB8036000AD487 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 3481BD500EACF81D00C78F66 /* SettingsViewController.m */;
- name = "SettingsViewController.m: 167";
- rLen = 6;
- rLoc = 5463;
- rType = 0;
- vrLen = 1931;
- vrLoc = 4538;
- };
- 34B318C90ECB8036000AD487 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 17";
- rLen = 0;
- rLoc = 337;
- rType = 0;
- vrLen = 1680;
- vrLoc = 51;
- };
- 34B318CF0ECB8055000AD487 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 17";
- rLen = 0;
- rLoc = 337;
- rType = 0;
- vrLen = 1680;
- vrLoc = 51;
- };
- 34B318D00ECB8055000AD487 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 17";
- rLen = 0;
- rLoc = 337;
- rType = 0;
- vrLen = 1680;
- vrLoc = 51;
- };
- 34BFCFF60ECB7E9C00325DF2 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 11";
- rLen = 0;
- rLoc = 248;
- rType = 0;
- vrLen = 1680;
- vrLoc = 51;
- };
- 34BFD0060ECB7EBC00325DF2 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 349AFEAD0E925AAA008E83C1 /* EditSubjectViewController.m */;
- name = "EditSubjectViewController.m: 11";
- rLen = 22;
- rLoc = 246;
- rType = 0;
- vrLen = 1680;
- vrLoc = 51;
- };
34C17A8D0EB0CCD300768D1C /* AboutViewController.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1229, 756}}";
diff --git a/iphone/FixMyStreet/FixMyStreet.xcodeproj/project.pbxproj b/iphone/FixMyStreet/FixMyStreet.xcodeproj/project.pbxproj
index 3b3bcea2b..759918450 100755
--- a/iphone/FixMyStreet/FixMyStreet.xcodeproj/project.pbxproj
+++ b/iphone/FixMyStreet/FixMyStreet.xcodeproj/project.pbxproj
@@ -13,6 +13,8 @@
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
+ 3442AA220EE575BA000B191D /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 3442AA210EE575BA000B191D /* Reachability.m */; };
+ 3442AA8F0EE578CF000B191D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3442AA8E0EE578CF000B191D /* SystemConfiguration.framework */; };
344E0D560E91440500483FD6 /* imageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 344E0D550E91440500483FD6 /* imageCell.m */; };
344E0E5D0E918B1000483FD6 /* Report.m in Sources */ = {isa = PBXBuildFile; fileRef = 344E0E5C0E918B1000483FD6 /* Report.m */; };
347710950E8BDA9B0051DFFD /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 347710940E8BDA9B0051DFFD /* Icon.png */; };
@@ -43,6 +45,9 @@
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
32CA4F630368D1EE00C91783 /* FixMyStreet_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FixMyStreet_Prefix.pch; sourceTree = "<group>"; };
342F98AE0E951731006935E9 /* Root.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Root.plist; sourceTree = "<group>"; };
+ 3442AA200EE575BA000B191D /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; };
+ 3442AA210EE575BA000B191D /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = "<group>"; };
+ 3442AA8E0EE578CF000B191D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
344E0D540E91440500483FD6 /* imageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imageCell.h; path = Classes/imageCell.h; sourceTree = "<group>"; };
344E0D550E91440500483FD6 /* imageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = imageCell.m; path = Classes/imageCell.m; sourceTree = "<group>"; wrapsLines = 1; };
344E0E5B0E918B1000483FD6 /* Report.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Report.h; path = Classes/Report.h; sourceTree = "<group>"; };
@@ -80,6 +85,7 @@
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
347A02770E93D2A800D716CB /* CoreLocation.framework in Frameworks */,
+ 3442AA8F0EE578CF000B191D /* SystemConfiguration.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -99,6 +105,8 @@
347A021C0E93CDA200D716CB /* MyCLController.m */,
1D3623240D0F684500981E51 /* FixMyStreetAppDelegate.h */,
1D3623250D0F684500981E51 /* FixMyStreetAppDelegate.m */,
+ 3442AA200EE575BA000B191D /* Reachability.h */,
+ 3442AA210EE575BA000B191D /* Reachability.m */,
3481BD1F0EACEE3300C78F66 /* EditingTableViewCell.h */,
3481BD200EACEE3300C78F66 /* EditingTableViewCell.m */,
349AFEAC0E925AAA008E83C1 /* EditSubjectViewController.h */,
@@ -158,6 +166,7 @@
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
+ 3442AA8E0EE578CF000B191D /* SystemConfiguration.framework */,
347A02760E93D2A800D716CB /* CoreLocation.framework */,
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
1D30AB110D05D00D00671497 /* Foundation.framework */,
@@ -263,6 +272,7 @@
3481BD210EACEE3300C78F66 /* EditingTableViewCell.m in Sources */,
3481BD510EACF81D00C78F66 /* SettingsViewController.m in Sources */,
34C17A8F0EB0CCD300768D1C /* AboutViewController.m in Sources */,
+ 3442AA220EE575BA000B191D /* Reachability.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -303,6 +313,38 @@
};
name = Release;
};
+ 346099980ED46A5D00B731FF /* Distribution AppStore */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = iphoneos2.1;
+ };
+ name = "Distribution AppStore";
+ };
+ 346099990ED46A5D00B731FF /* Distribution AppStore */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: UK Citizens Online Democracy";
+ COPY_PHASE_STRIP = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)\"",
+ );
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = FixMyStreet_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ PRODUCT_NAME = FixMyStreet;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "74CF3CC5-0ADC-4BF7-A4F1-21B5B4804F9E";
+ };
+ name = "Distribution AppStore";
+ };
349A563F0ECB108A0091BE4F /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -331,7 +373,7 @@
GCC_PREFIX_HEADER = FixMyStreet_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = FixMyStreet;
- "PROVISIONING_PROFILE[sdk=iphoneos*]" = "E31FC695-9728-4004-B218-CE5B143A1A82";
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "3A3A6AE0-D989-4F0B-A3B2-5C628CBC57DE";
};
name = Distribution;
};
@@ -371,6 +413,7 @@
1D6058940D05DD3E006BFB54 /* Debug */,
1D6058950D05DD3E006BFB54 /* Release */,
349A56400ECB108A0091BE4F /* Distribution */,
+ 346099990ED46A5D00B731FF /* Distribution AppStore */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@@ -381,6 +424,7 @@
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
349A563F0ECB108A0091BE4F /* Distribution */,
+ 346099980ED46A5D00B731FF /* Distribution AppStore */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
diff --git a/iphone/FixMyStreet/Icon.png b/iphone/FixMyStreet/Icon.png
index 74da930dd..87e437a18 100755
--- a/iphone/FixMyStreet/Icon.png
+++ b/iphone/FixMyStreet/Icon.png
Binary files differ
diff --git a/iphone/FixMyStreet/MainViewController.xib b/iphone/FixMyStreet/MainViewController.xib
index 121bbe018..9307bd96e 100644
--- a/iphone/FixMyStreet/MainViewController.xib
+++ b/iphone/FixMyStreet/MainViewController.xib
@@ -57,7 +57,7 @@
<object class="IBUIButton" id="323841673">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
- <string key="NSFrame">{{282, 377}, {18, 19}}</string>
+ <string key="NSFrame">{{272, 367}, {18, 19}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
diff --git a/iphone/FixMyStreet/MyCLController.h b/iphone/FixMyStreet/MyCLController.h
index 6d8c4e1da..37dd54a3e 100755
--- a/iphone/FixMyStreet/MyCLController.h
+++ b/iphone/FixMyStreet/MyCLController.h
@@ -51,7 +51,7 @@ Copyright (C) 2008 Apple Inc. All Rights Reserved.
@protocol MyCLControllerDelegate <NSObject>
@required
-(void)newLocationUpdate:(CLLocation *)location;
--(void)newError:(NSString *)text;
+-(void)newLocationError:(NSString *)text;
@end
diff --git a/iphone/FixMyStreet/MyCLController.m b/iphone/FixMyStreet/MyCLController.m
index df2fa08f7..0e996e242 100755
--- a/iphone/FixMyStreet/MyCLController.m
+++ b/iphone/FixMyStreet/MyCLController.m
@@ -110,7 +110,8 @@ static MyCLController *sharedCLDelegate = nil;
// can reset this for all apps by going to Settings > General > Reset > Reset Location Warnings.
//
case kCLErrorDenied:
- [errorString appendFormat:@"%@\n", NSLocalizedString(@"LocationDenied", nil)];
+ [self.locationManager stopUpdatingLocation];
+ [self.delegate newLocationError:@"FixMyStreet needs your location to know where your problem is."];
break;
// This error code is usually returned whenever the device has no data or WiFi connectivity,