diff --git a/Sample/Mockup1.png b/Mockup1.png similarity index 100% rename from Sample/Mockup1.png rename to Mockup1.png diff --git a/Sample/Mockup2.png b/Mockup2.png similarity index 100% rename from Sample/Mockup2.png rename to Mockup2.png diff --git a/README.md b/README.md index 13ce6db..24a1dc0 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ To help getting you started, a sample project is also available in the "Sample" It is designed to demo the main features of both the API and the SDK. - + ## 😱 Compatibility with Google pods Since V1.3, PXGoogleDirections uses Google's latest branch of Google Maps iOS SDK, which has now been split into smaller, more modular frameworks. PXGoogleDirections has a dependency with three of them: diff --git a/Sample-Carthage/Cartfile b/Sample-Carthage/Cartfile new file mode 100644 index 0000000..412c4f0 --- /dev/null +++ b/Sample-Carthage/Cartfile @@ -0,0 +1 @@ +github "Poulpix/PXGoogleDirections" diff --git a/Sample-Carthage/Cartfile.resolved b/Sample-Carthage/Cartfile.resolved new file mode 100644 index 0000000..1b6d373 --- /dev/null +++ b/Sample-Carthage/Cartfile.resolved @@ -0,0 +1 @@ +github "Poulpix/PXGoogleDirections" "1.3.1" diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/.gitignore b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/.gitignore new file mode 100644 index 0000000..09db6f8 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/.gitignore @@ -0,0 +1,32 @@ +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control +# +Pods/ +*.lock + +# Sample +# +# Omit private information, like API keys in the sample project +Sample/Private/*.* diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/GoogleMaps b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/GoogleMaps new file mode 120000 index 0000000..17ed6fb --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/GoogleMaps @@ -0,0 +1 @@ +Versions/Current/GoogleMaps \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Headers b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Modules b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Modules new file mode 120000 index 0000000..5736f31 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Resources b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/GoogleMaps b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/GoogleMaps new file mode 100755 index 0000000..bfacd44 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/GoogleMaps differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSAddress.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSAddress.h new file mode 100755 index 0000000..5d178b0 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSAddress.h @@ -0,0 +1,78 @@ +// +// GMSAddress.h +// Google Maps SDK for iOS +// +// Copyright 2014 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import + +GMS_ASSUME_NONNULL_BEGIN + +/** + * A result from a reverse geocode request, containing a human-readable address. This class is + * immutable and should be obtained via GMSGeocoder. + * + * Some of the fields may be nil, indicating they are not present. + */ +@interface GMSAddress : NSObject + +/** Location, or kLocationCoordinate2DInvalid if unknown. */ +@property(nonatomic, readonly) CLLocationCoordinate2D coordinate; + +/** Street number and name. */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR thoroughfare; + +/** Locality or city. */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR locality; + +/** Subdivision of locality, district or park. */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR subLocality; + +/** Region/State/Administrative area. */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR administrativeArea; + +/** Postal/Zip code. */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR postalCode; + +/** The country name. */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR country; + +/** An array of NSString containing formatted lines of the address. May be nil. */ +@property(nonatomic, copy, readonly) GMS_NSArrayOf(NSString *) *GMS_NULLABLE_PTR lines; + +/** + * Returns the first line of the address. + * + * This method is obsolete and deprecated and will be removed in a future release. + * Use the lines property instead. + */ +- (NSString *GMS_NULLABLE_PTR)addressLine1 __GMS_AVAILABLE_BUT_DEPRECATED; + +/** + * Returns the second line of the address. + * + * This method is obsolete and deprecated and will be removed in a future release. + * Use the lines property instead. + */ +- (NSString *GMS_NULLABLE_PTR)addressLine2 __GMS_AVAILABLE_BUT_DEPRECATED; + +@end + +/** + * The former type of geocode results (pre-1.7). This remains here for migration and will be + * removed in future releases. + */ +@compatibility_alias GMSReverseGeocodeResult GMSAddress; + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCALayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCALayer.h new file mode 100755 index 0000000..c10bc7b --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCALayer.h @@ -0,0 +1,20 @@ +// +// GMSCALayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** + * GMSCALayer is a superclass used by layers in the Google Maps SDK for iOS, + * such as GMSMapLayer and GMSPanoramaLayer. + * + * This is an implementation detail and it should not be instantiated directly. + */ +@interface GMSCALayer : CALayer +@end diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCameraPosition.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCameraPosition.h new file mode 100755 index 0000000..be088ca --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCameraPosition.h @@ -0,0 +1,131 @@ +// +// GMSCameraPosition.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** +* An immutable class that aggregates all camera position parameters. + */ +@interface GMSCameraPosition : NSObject + +/** + * Location on the Earth towards which the camera points. + */ +@property(nonatomic, readonly) CLLocationCoordinate2D target; + +/** + * Zoom level. Zoom uses an exponentional scale, where zoom 0 represents the entire world as a + * 256 x 256 square. Each successive zoom level increases magnification by a factor of 2. So at + * zoom level 1, the world is 512x512, and at zoom level 2, the entire world is 1024x1024. + */ +@property(nonatomic, readonly) float zoom; + +/** + * Bearing of the camera, in degrees clockwise from true north. + */ +@property(nonatomic, readonly) CLLocationDirection bearing; + +/** + * The angle, in degrees, of the camera from the nadir (directly facing the Earth). 0 is + * straight down, 90 is parallel to the ground. Note that the maximum angle allowed is dependent + * on the zoom. You can think of it as a series of line segments as a function of zoom, rather + * than a step function. For zoom 16 and above, the maximum angle is 65 degrees. For zoom 10 and + * below, the maximum angle is 30 degrees. + */ +@property(nonatomic, readonly) double viewingAngle; + +/** + * Designated initializer. Configures this GMSCameraPosition with all available camera properties. + * Building a GMSCameraPosition via this initializer (or by the following convenience constructors) + * will implicitly clamp camera values. + * + * @param target Location on the earth towards which the camera points. + * @param zoom The zoom level near the center of the screen. + * @param bearing Bearing of the camera in degrees clockwise from true north. + * @param viewingAngle The angle, in degrees, of the camera angle from the nadir (directly facing + * the Earth) + */ +- (id)initWithTarget:(CLLocationCoordinate2D)target + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Convenience constructor for GMSCameraPosition for a particular target and zoom level. This will + * set the bearing and viewingAngle properties of this camera to zero defaults (i.e., directly + * facing the Earth's surface, with the top of the screen pointing north). + */ ++ (instancetype)cameraWithTarget:(CLLocationCoordinate2D)target zoom:(float)zoom; + +/** + * Convenience constructor for GMSCameraPosition, as per cameraWithTarget:zoom:. + */ ++ (instancetype)cameraWithLatitude:(CLLocationDegrees)latitude + longitude:(CLLocationDegrees)longitude + zoom:(float)zoom; + +/** + * Convenience constructor for GMSCameraPosition, with all camera properties as per + * initWithTarget:zoom:bearing:viewingAngle:. + */ ++ (instancetype)cameraWithTarget:(CLLocationCoordinate2D)target + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Convenience constructor for GMSCameraPosition, with latitude/longitude and all other camera + * properties as per initWithTarget:zoom:bearing:viewingAngle:. + */ ++ (instancetype)cameraWithLatitude:(CLLocationDegrees)latitude + longitude:(CLLocationDegrees)longitude + zoom:(float)zoom + bearing:(CLLocationDirection)bearing + viewingAngle:(double)viewingAngle; + +/** + * Get the zoom level at which |meters| distance, at given |coord| on Earth, correspond to the + * specified number of screen |points|. + * + * For extremely large or small distances the returned zoom level may be smaller or larger than the + * minimum or maximum zoom level allowed on the camera. + * + * This helper method is useful for building camera positions that contain specific physical areas + * on Earth. + */ ++ (float)zoomAtCoordinate:(CLLocationCoordinate2D)coordinate + forMeters:(CLLocationDistance)meters + perPoints:(CGFloat)points; + +@end + +/** Mutable version of GMSCameraPosition. */ +@interface GMSMutableCameraPosition : GMSCameraPosition +@property(nonatomic, assign) CLLocationCoordinate2D target; +@property(nonatomic, assign) float zoom; +@property(nonatomic, assign) CLLocationDirection bearing; +@property(nonatomic, assign) double viewingAngle; +@end + +/** The maximum zoom (closest to the Earth's surface) permitted by the map camera. */ +FOUNDATION_EXTERN const float kGMSMaxZoomLevel; + +/** The minimum zoom (farthest from the Earth's surface) permitted by the map camera. */ +FOUNDATION_EXTERN const float kGMSMinZoomLevel; + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCameraUpdate.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCameraUpdate.h new file mode 100755 index 0000000..d1ec13a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCameraUpdate.h @@ -0,0 +1,115 @@ +// +// GMSCameraUpdate.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class GMSCameraPosition; +@class GMSCoordinateBounds; + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSCameraUpdate represents an update that may be applied to a GMSMapView. + * It encapsulates some logic for modifying the current camera. + * It should only be constructed using the factory helper methods below. + */ +@interface GMSCameraUpdate : NSObject + +/** + * Returns a GMSCameraUpdate that zooms in on the map. + * The zoom increment is 1.0. + */ ++ (GMSCameraUpdate *)zoomIn; + +/** + * Returns a GMSCameraUpdate that zooms out on the map. + * The zoom increment is -1.0. + */ ++ (GMSCameraUpdate *)zoomOut; + +/** + * Returns a GMSCameraUpdate that changes the zoom by the specified amount. + */ ++ (GMSCameraUpdate *)zoomBy:(float)delta; + +/** + * Returns a GMSCameraUpdate that sets the zoom to the specified amount. + */ ++ (GMSCameraUpdate *)zoomTo:(float)zoom; + +/** + * Returns a GMSCameraUpdate that sets the camera target to the specified + * coordinate. + */ ++ (GMSCameraUpdate *)setTarget:(CLLocationCoordinate2D)target; + +/** + * Returns a GMSCameraUpdate that sets the camera target and zoom to the + * specified values. + */ ++ (GMSCameraUpdate *)setTarget:(CLLocationCoordinate2D)target zoom:(float)zoom; + +/** + * Returns a GMSCameraUpdate that sets the camera to the specified + * GMSCameraPosition. + */ ++ (GMSCameraUpdate *)setCamera:(GMSCameraPosition *)camera; + +/** + * Returns a GMSCameraUpdate that transforms the camera such that the specified + * bounds are centered on screen at the greatest possible zoom level. The bounds + * will have a default padding of 64 points. + * + * The returned camera update will set the camera's bearing and tilt to their + * default zero values (i.e., facing north and looking directly at the Earth). + */ ++ (GMSCameraUpdate *)fitBounds:(GMSCoordinateBounds *)bounds; + +/** + * This is similar to fitBounds: but allows specifying the padding (in points) + * in order to inset the bounding box from the view's edges. + * If the requested |padding| is larger than the view size in either the + * vertical or horizontal direction the map will be maximally zoomed out. + */ ++ (GMSCameraUpdate *)fitBounds:(GMSCoordinateBounds *)bounds + withPadding:(CGFloat)padding; + +/** + * This is similar to fitBounds: but allows specifying edge insets + * in order to inset the bounding box from the view's edges. + * If the requested |edgeInsets| are larger than the view size in either the + * vertical or horizontal direction the map will be maximally zoomed out. + */ ++ (GMSCameraUpdate *)fitBounds:(GMSCoordinateBounds *)bounds + withEdgeInsets:(UIEdgeInsets)edgeInsets; + +/** + * Returns a GMSCameraUpdate that shifts the center of the view by the + * specified number of points in the x and y directions. + * X grows to the right, Y grows down. + */ ++ (GMSCameraUpdate *)scrollByX:(CGFloat)dX Y:(CGFloat)dY; + +/** + * Returns a GMSCameraUpdate that zooms with a focus point; the focus point + * stays fixed on screen. + */ ++ (GMSCameraUpdate *)zoomBy:(float)zoom atPoint:(CGPoint)point; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCircle.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCircle.h new file mode 100755 index 0000000..37ae9cc --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCircle.h @@ -0,0 +1,59 @@ +// +// GMSCircle.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * A circle on the Earth's surface (spherical cap). + */ +@interface GMSCircle : GMSOverlay + +/** Position on Earth of circle center. */ +@property(nonatomic, assign) CLLocationCoordinate2D position; + +/** Radius of the circle in meters; must be positive. */ +@property(nonatomic, assign) CLLocationDistance radius; + +/** + * The width of the circle's outline in screen points. Defaults to 1. As per + * GMSPolygon, the width does not scale when the map is zoomed. + * Setting strokeWidth to 0 results in no stroke. + */ +@property(nonatomic, assign) CGFloat strokeWidth; + +/** The color of this circle's outline. The default value is black. */ +@property(nonatomic, strong) UIColor *GMS_NULLABLE_PTR strokeColor; + +/** + * The interior of the circle is painted with fillColor. + * The default value is nil, resulting in no fill. + */ +@property(nonatomic, strong) UIColor *GMS_NULLABLE_PTR fillColor; + +/** + * Convenience constructor for GMSCircle for a particular position and radius. + * Other properties will have default values. + */ ++ (instancetype)circleWithPosition:(CLLocationCoordinate2D)position + radius:(CLLocationDistance)radius; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCoordinateBounds+GoogleMaps.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCoordinateBounds+GoogleMaps.h new file mode 100755 index 0000000..01b29ef --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSCoordinateBounds+GoogleMaps.h @@ -0,0 +1,44 @@ +// +// GMSCoordinateBounds+GoogleMaps.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +#import + +@class GMSPath; + +GMS_ASSUME_NONNULL_BEGIN + +@interface GMSCoordinateBounds (GoogleMaps) + +/** + * Inits with bounds that encompass |region|. + */ +- (id)initWithRegion:(GMSVisibleRegion)region; + +/** + * Inits with bounds that encompass |path|. + */ +- (id)initWithPath:(GMSPath *)path; + +/** + * Returns a GMSCoordinateBounds representing the current bounds extended to + * include |path|. + */ +- (GMSCoordinateBounds *)includingPath:(GMSPath *)path; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSDeprecationMacros.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSDeprecationMacros.h new file mode 100755 index 0000000..837dd16 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSDeprecationMacros.h @@ -0,0 +1,18 @@ +// +// GMSDeprecationMacros.h +// Google Maps SDK for iOS +// +// Copyright 2015 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#ifndef IPHONE_MAPS_SDK_MAPS_GMSDEPRECATIONMACROS_H_ +#define IPHONE_MAPS_SDK_MAPS_GMSDEPRECATIONMACROS_H_ + +#ifndef __GMS_AVAILABLE_BUT_DEPRECATED +#define __GMS_AVAILABLE_BUT_DEPRECATED __deprecated +#endif + +#endif diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGeocoder.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGeocoder.h new file mode 100755 index 0000000..089b6ee --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGeocoder.h @@ -0,0 +1,66 @@ +// +// GMSGeocoder.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import + +GMS_ASSUME_NONNULL_BEGIN + +@class GMSReverseGeocodeResponse; + +/** GMSGeocoder error codes, embedded in NSError. */ +typedef NS_ENUM(NSInteger, GMSGeocoderErrorCode) { + kGMSGeocoderErrorInvalidCoordinate = 1, + kGMSGeocoderErrorInternal, +}; + +/** Handler that reports a reverse geocoding response, or error. */ +typedef void (^GMSReverseGeocodeCallback)(GMSReverseGeocodeResponse *GMS_NULLABLE_PTR, + NSError *GMS_NULLABLE_PTR); + +/** + * Exposes a service for reverse geocoding. This maps Earth coordinates (latitude and longitude) to + * a collection of addresses near that coordinate. + */ +@interface GMSGeocoder : NSObject + +/* Convenience constructor for GMSGeocoder. */ ++ (GMSGeocoder *)geocoder; + +/** + * Reverse geocodes a coordinate on the Earth's surface. + * + * @param coordinate The coordinate to reverse geocode. + * @param handler The callback to invoke with the reverse geocode results. + * The callback will be invoked asynchronously from the main thread. + */ +- (void)reverseGeocodeCoordinate:(CLLocationCoordinate2D)coordinate + completionHandler:(GMSReverseGeocodeCallback)handler; + +@end + +/** A collection of results from a reverse geocode request. */ +@interface GMSReverseGeocodeResponse : NSObject + +/** Returns the first result, or nil if no results were available. */ +- (GMSAddress *GMS_NULLABLE_PTR)firstResult; + +/** Returns an array of all the results (contains GMSAddress), including the first result. */ +- (GMS_NSArrayOf(GMSAddress *) * GMS_NULLABLE_PTR)results; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGeometryUtils.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGeometryUtils.h new file mode 100755 index 0000000..9ffcf94 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGeometryUtils.h @@ -0,0 +1,236 @@ +// +// GMSGeometryUtils.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +/** + * \defgroup GeometryUtils GMSGeometryUtils + * @{ + */ + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import + +@class GMSPath; +@class GMSStrokeStyle; +@class GMSStyleSpan; + +GMS_ASSUME_NONNULL_BEGIN + +/** Average Earth radius in meters. */ +static const CLLocationDistance kGMSEarthRadius = 6371009.0; + +/** + * A point on the map. May represent a projected coordinate. x is in [-1, 1]. + * The axis direction is normal: y grows towards North, x grows towards East. + * (0, 0) is the center of the map. See GMSProject() and GMSUnproject(). + */ +typedef struct GMSMapPoint { + double x; + double y; +} GMSMapPoint; + +/** Projects |coordinate| to the map. |coordinate| must be valid. */ +FOUNDATION_EXPORT +GMSMapPoint GMSProject(CLLocationCoordinate2D coordinate); + +/** Unprojects |point| from the map. point.x must be in [-1, 1]. */ +FOUNDATION_EXPORT +CLLocationCoordinate2D GMSUnproject(GMSMapPoint point); + +/** + * Returns a linearly interpolated point on the segment [a, b], at the fraction + * |t| from |a|. |t|==0 corresponds to |a|, |t|==1 corresponds to |b|. + * The interpolation takes place along the short path between the points + * potentially crossing the date line. E.g. interpolating from San Francisco + * to Tokyo will pass north of Hawaii and cross the date line. + */ +FOUNDATION_EXPORT +GMSMapPoint GMSMapPointInterpolate(GMSMapPoint a, GMSMapPoint b, double t); + +/** + * Returns the length of the segment [a, b] in projected space. The length is + * computed along the short path between the points potentially crossing the + * date line. E.g. the distance between the points corresponding to + * San Francisco and Tokyo measures the segment that passes north of Hawaii + * crossing the date line. + */ +FOUNDATION_EXPORT +double GMSMapPointDistance(GMSMapPoint a, GMSMapPoint b); + +/** + * Returns whether |point| lies inside of path. The path is always considered + * closed, regardless of whether the last point equals the first or not. + * Inside is defined as not containing the South Pole -- the South Pole is + * always outside. + * |path| describes great circle segments if |geodesic| is YES, and rhumb + * (loxodromic) segments otherwise. + * If |point| is exactly equal to one of the vertices, the result is YES. + * A point that is not equal to a vertex is on one side or the other of any path + * segment -- it can never be "exactly on the border". + * See GMSGeometryIsLocationOnPath() for a border test with tolerance. + */ +FOUNDATION_EXPORT +BOOL GMSGeometryContainsLocation(CLLocationCoordinate2D point, GMSPath *path, + BOOL geodesic); + +/** + * Returns whether |point| lies on or near |path|, within the specified + * |tolerance| in meters. + * |path| is composed of great circle segments if |geodesic| is YES, and of + * rhumb (loxodromic) segments if |geodesic| is NO. + * See also GMSGeometryIsLocationOnPath(point, path, geodesic). + * + * The tolerance, in meters, is relative to the spherical radius of the Earth. + * If you need to work on a sphere of different radius, + * you may compute the equivalent tolerance from the desired tolerance on the + * sphere of radius R: tolerance = toleranceR * (RadiusEarth / R), + * with RadiusEarth==6371009. + */ +FOUNDATION_EXPORT +BOOL GMSGeometryIsLocationOnPathTolerance(CLLocationCoordinate2D point, + GMSPath *path, + BOOL geodesic, + CLLocationDistance tolerance); + +/** + * Same as GMSGeometryIsLocationOnPath(point, path, geodesic, tolerance), + * with a default tolerance of 0.1 meters. + */ +FOUNDATION_EXPORT +BOOL GMSGeometryIsLocationOnPath(CLLocationCoordinate2D point, + GMSPath *path, + BOOL geodesic); + +/** + * Returns the great circle distance between two coordinates, in meters, + * on Earth. + * This is the shortest distance between the two coordinates on the sphere. + * Both coordinates must be valid. + */ +FOUNDATION_EXPORT +CLLocationDistance GMSGeometryDistance(CLLocationCoordinate2D from, + CLLocationCoordinate2D to); + +/** + * Returns the great circle length of |path|, in meters, on Earth. + * This is the sum of GMSGeometryDistance() over the path segments. + * All the coordinates of the path must be valid. + */ +FOUNDATION_EXPORT +CLLocationDistance GMSGeometryLength(GMSPath *path); + +/** + * Returns the area of a geodesic polygon defined by |path| on Earth. + * The "inside" of the polygon is defined as not containing the South pole. + * If |path| is not closed, it is implicitly treated as a closed path + * nevertheless and the result is the same. + * All coordinates of the path must be valid. + * If any segment of the path is a pair of antipodal points, the + * result is undefined -- because two antipodal points do not form a + * unique great circle segment on the sphere. + * The polygon must be simple (not self-overlapping) and may be concave. + */ +FOUNDATION_EXPORT +double GMSGeometryArea(GMSPath *path); + +/** + * Returns the signed area of a geodesic polygon defined by |path| on Earth. + * The result has the same absolute value as GMSGeometryArea(); it is positive + * if the points of path are in counter-clockwise order, and negative otherwise. + * The same restrictions as on GMSGeometryArea() apply. + */ +FOUNDATION_EXPORT +double GMSGeometrySignedArea(GMSPath *path); + +/** + * Returns the initial heading (degrees clockwise of North) at |from| + * of the shortest path to |to|. + * Returns 0 if the two coordinates are the same. + * Both coordinates must be valid. + * The returned value is in the range [0, 360). + * + * To get the final heading at |to| one may use + * (GMSGeometryHeading(|to|, |from|) + 180) modulo 360. + */ +FOUNDATION_EXPORT +CLLocationDirection GMSGeometryHeading(CLLocationCoordinate2D from, + CLLocationCoordinate2D to); + +/** + * Returns the destination coordinate, when starting at |from| + * with initial |heading|, travelling |distance| meters along a great circle + * arc, on Earth. + * The resulting longitude is in the range [-180, 180). + * Both coordinates must be valid. + */ +FOUNDATION_EXPORT +CLLocationCoordinate2D GMSGeometryOffset(CLLocationCoordinate2D from, + CLLocationDistance distance, + CLLocationDirection heading); + +/** + * Returns the coordinate that lies the given |fraction| of the way between + * the |from| and |to| coordinates on the shortest path between the two. + * The resulting longitude is in the range [-180, 180). + */ +FOUNDATION_EXPORT +CLLocationCoordinate2D GMSGeometryInterpolate(CLLocationCoordinate2D from, + CLLocationCoordinate2D to, + double fraction); + + +/** + * Returns an NSArray of GMSStyleSpan constructed by repeated application of style and length + * information from |styles| and |lengths| along |path|. + * + * |path| the path along which the output spans are computed. + * |styles| an NSArray of GMSStrokeStyle. Wraps if consumed. Can't be empty. + * |lengths| an NSArray of NSNumber; each entry gives the length of the corresponding + * style from |styles|. Wraps if consumed. Can't be empty. + * |lengthKind| the interpretation of values from |lengths| (geodesic, rhumb or projected). + * + * Example: a polyline with alternating black and white spans: + * + *
+ * GMSMutablePath *path;
+ * NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]],
+ *                     [GMSStrokeStyle solidColor:[UIColor blackColor]]];
+ * NSArray *lengths = @[@100000, @50000];
+ * polyline.path = path;
+ * polyline.spans = GMSStyleSpans(path, styles, lengths, kGMSLengthRhumb);
+ * 
+ */ +FOUNDATION_EXPORT +GMS_NSArrayOf(GMSStyleSpan *) *GMSStyleSpans(GMSPath *path, + GMS_NSArrayOf(GMSStrokeStyle *) *styles, + GMS_NSArrayOf(NSNumber *) *lengths, + GMSLengthKind lengthKind); + +/** + * Similar to GMSStyleSpans(path, styles, lengths, lengthKind) but additionally takes an initial + * length offset that will be skipped over relative to the |lengths| array. + * + * |lengthOffset| the length (e.g. in meters) that should be skipped initially from |lengths|. + */ +FOUNDATION_EXPORT +GMS_NSArrayOf(GMSStyleSpan *) *GMSStyleSpansOffset(GMSPath *path, + GMS_NSArrayOf(GMSStrokeStyle *) *styles, + GMS_NSArrayOf(NSNumber *) *lengths, + GMSLengthKind lengthKind, + double lengthOffset); + +/**@}*/ + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGroundOverlay.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGroundOverlay.h new file mode 100755 index 0000000..efbd6df --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSGroundOverlay.h @@ -0,0 +1,91 @@ +// +// GMSGroundOverlay.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class GMSCoordinateBounds; + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSGroundOverlay specifies the available options for a ground overlay that + * exists on the Earth's surface. Unlike a marker, the position of a ground + * overlay is specified explicitly and it does not face the camera. + */ +@interface GMSGroundOverlay : GMSOverlay + +/** + * The position of this GMSGroundOverlay, or more specifically, the physical + * position of its anchor. If this is changed, |bounds| will be moved around + * the new position. + */ +@property(nonatomic, assign) CLLocationCoordinate2D position; + +/** + * The anchor specifies where this GMSGroundOverlay is anchored to the Earth in + * relation to |bounds|. If this is modified, |position| will be set to the + * corresponding new position within |bounds|. + */ +@property(nonatomic, assign) CGPoint anchor; + +/** + * Icon to render within |bounds| on the Earth. If this is nil, the overlay will + * not be visible (unlike GMSMarker which has a default image). + */ +@property(nonatomic, strong) UIImage *GMS_NULLABLE_PTR icon; + +/** + * Sets the opacity of the ground overlay, between 0 (completely transparent) + * and 1 (default) inclusive. + */ +@property(nonatomic, assign) float opacity; + +/** + * Bearing of this ground overlay, in degrees. The default value, zero, points + * this ground overlay up/down along the normal Y axis of the earth. + */ +@property(nonatomic, assign) CLLocationDirection bearing; + +/** + * The 2D bounds on the Earth in which |icon| is drawn. Changing this value + * will adjust |position| accordingly. + */ +@property(nonatomic, strong) GMSCoordinateBounds *GMS_NULLABLE_PTR bounds; + +/** + * Convenience constructor for GMSGroundOverlay for a particular |bounds| and + * |icon|. Will set |position| accordingly. + */ ++ (instancetype)groundOverlayWithBounds:(GMSCoordinateBounds *GMS_NULLABLE_PTR)bounds + icon:(UIImage *GMS_NULLABLE_PTR)icon; + +/** + * Constructs a GMSGroundOverlay that renders the given |icon| at |position|, + * as if the image's actual size matches camera pixels at |zoomLevel|. + */ ++ (instancetype)groundOverlayWithPosition:(CLLocationCoordinate2D)position + icon:(UIImage *GMS_NULLABLE_PTR)icon + zoomLevel:(CGFloat)zoomLevel; + +@end + +/** + * The default position of the ground anchor of a GMSGroundOverlay: the center + * point of the icon. + */ +FOUNDATION_EXTERN const CGPoint kGMSGroundOverlayDefaultAnchor; + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorBuilding.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorBuilding.h new file mode 100755 index 0000000..fe1b55a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorBuilding.h @@ -0,0 +1,47 @@ +// +// GMSIndoorBuilding.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +@class GMSIndoorLevel; + +/** + * Describes a building which contains levels. + */ +@interface GMSIndoorBuilding : NSObject + +/** + * Array of GMSIndoorLevel describing the levels which make up the building. + * The levels are in 'display order' from top to bottom. + */ +@property(nonatomic, strong, readonly) GMS_NSArrayOf(GMSIndoorLevel *) * levels; + +/** + * Index in the levels array of the default level. + */ +@property(nonatomic, assign, readonly) NSUInteger defaultLevelIndex; + +/** + * If YES, the building is entirely underground and supports being hidden. + */ +@property(nonatomic, assign, readonly, getter=isUnderground) BOOL underground; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorDisplay.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorDisplay.h new file mode 100755 index 0000000..870e94a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorDisplay.h @@ -0,0 +1,71 @@ +// +// GMSIndoorDisplay.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class GMSIndoorBuilding; +@class GMSIndoorLevel; + +GMS_ASSUME_NONNULL_BEGIN + +/** Delegate for events on GMSIndoorDisplay. */ +@protocol GMSIndoorDisplayDelegate +@optional + +/** + * Raised when the activeBuilding has changed. The activeLevel will also have + * already been updated for the new building, but didChangeActiveLevel: will + * be raised after this method. + */ +- (void)didChangeActiveBuilding:(GMSIndoorBuilding *GMS_NULLABLE_PTR)building; + +/** + * Raised when the activeLevel has changed. This event is raised for all + * changes, including explicit setting of the property. + */ +- (void)didChangeActiveLevel:(GMSIndoorLevel *GMS_NULLABLE_PTR)level; + +@end + +/** + * Provides ability to observe or control the display of indoor level data. + * + * Like GMSMapView, GMSIndoorDisplay may only be used from the main thread. + */ +@interface GMSIndoorDisplay : NSObject + +/** GMSIndoorDisplay delegate */ +@property(nonatomic, weak) id GMS_NULLABLE_PTR delegate; + +/** + * Provides the currently focused building, will be nil if there is no + * building with indoor data currently under focus. + */ +@property(nonatomic, strong, readonly) GMSIndoorBuilding *GMS_NULLABLE_PTR activeBuilding; + +/** + * Provides and controls the active level for activeBuilding. Will be updated + * whenever activeBuilding changes, and may be set to any member of + * activeBuilding's levels property. May also be set to nil if the building is + * underground, to stop showing the building (the building will remain active). + * Will always be nil if activeBuilding is nil. + * Any attempt to set it to an invalid value will be ignored. + */ +@property(nonatomic, strong) GMSIndoorLevel *GMS_NULLABLE_PTR activeLevel; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorLevel.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorLevel.h new file mode 100755 index 0000000..1ecd377 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSIndoorLevel.h @@ -0,0 +1,37 @@ +// +// GMSIndoorLevel.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * Describes a single level in a building. + * Multiple buildings can share a level - in this case the level instances will + * compare as equal, even though the level numbers/names may be different. + */ +@interface GMSIndoorLevel : NSObject + +/** Localized display name for the level, e.g. "Ground floor". */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR name; + +/** Localized short display name for the level, e.g. "1". */ +@property(nonatomic, copy, readonly) NSString *GMS_NULLABLE_PTR shortName; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapLayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapLayer.h new file mode 100755 index 0000000..3bc878f --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapLayer.h @@ -0,0 +1,106 @@ +// +// GMSMapLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * The following layer properties and constants describe the camera properties + * that may be animated on the custom model layer of a GMSMapView with Core + * Animation. For simple camera control and animation, please see the helper + * methods in GMSMapView+Animation.h, and the camera object definition within + * GMSCameraPosition.h. + * + * Changing layer properties triggers an implicit animation, e.g.:- + * mapView_.layer.cameraBearing = 20; + * + * An explicit animation, replacing the implicit animation, may be added after + * changing the property, e.g.- + * CAMediaTimingFunction *curve = [CAMediaTimingFunction functionWithName: + * kCAMediaTimingFunctionEaseInEaseOut]; + * CABasicAnimation *animation = + * [CABasicAnimation animationWithKeyPath:kGMSLayerCameraBearingKey]; + * animation.duration = 2.0f; + * animation.timingFunction = curve; + * animation.toValue = @20; + * [mapView_.layer addAnimation:animation forKey:kGMSLayerCameraBearingKey]; + * + * To control several implicit animations, Core Animation's transaction support + * may be used, e.g.- + * [CATransaction begin]; + * [CATransaction setAnimationDuration:2.0f]; + * mapView_.layer.cameraBearing = 20; + * mapView_.layer.cameraViewingAngle = 30; + * [CATransaction commit]; + * + * Note that these properties are not view-based. Please see "Animating View + * and Layer Changes Together" in the View Programming Guide for iOS- + * http://developer.apple.com/library/ios/#documentation/windowsviews/conceptual/viewpg_iphoneos/AnimatingViews/AnimatingViews.html + */ + +/** + * kGMSLayerCameraLatitudeKey ranges from [-85, 85], and values outside this + * range will be clamped. + */ +extern NSString *const kGMSLayerCameraLatitudeKey; + +/** + * kGMSLayerCameraLongitudeKey ranges from [-180, 180), and values outside this + * range will be wrapped to within this range. + */ +extern NSString *const kGMSLayerCameraLongitudeKey; + +/** + * kGMSLayerCameraBearingKey ranges from [0, 360), and values are wrapped. + */ +extern NSString *const kGMSLayerCameraBearingKey; + +/** + * kGMSLayerCameraZoomLevelKey ranges from [kGMSMinZoomLevel, kGMSMaxZoomLevel], + * and values are clamped. + */ +extern NSString *const kGMSLayerCameraZoomLevelKey; + +/** + * kGMSLayerCameraViewingAngleKey ranges from zero (i.e., facing straight down) + * and to between 30 and 45 degrees towards the horizon, depending on the model + * zoom level. + */ +extern NSString *const kGMSLayerCameraViewingAngleKey; + +/** + * GMSMapLayer is a custom subclass of CALayer, provided as the layer class on + * GMSMapView. This layer should not be instantiated directly. It provides + * model access to the camera normally defined on GMSMapView. + * + * Modifying or animating these properties will typically interrupt any current + * gesture on GMSMapView, e.g., a user's pan or rotation. Similarly, if a user + * performs an enabled gesture during an animation, the animation will stop + * 'in-place' (at the current presentation value). + */ +@interface GMSMapLayer : GMSCALayer +@property(nonatomic, assign) CLLocationDegrees cameraLatitude; +@property(nonatomic, assign) CLLocationDegrees cameraLongitude; +@property(nonatomic, assign) CLLocationDirection cameraBearing; +@property(nonatomic, assign) float cameraZoomLevel; +@property(nonatomic, assign) double cameraViewingAngle; +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapStyle.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapStyle.h new file mode 100755 index 0000000..8f75ae1 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapStyle.h @@ -0,0 +1,54 @@ +// +// GMSMapStyle.h +// Google Maps SDK for iOS +// +// Copyright 2016 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSMapStyle holds details about a style which can be applied to a map. + * + * With style options you can customize the presentation of the standard Google map styles, changing + * the visual display of features like roads, parks, and other points of interest. As well as + * changing the style of these features, you can also hide features entirely. This means that you + * can emphasize particular components of the map or make the map complement the content of your + * app. + * + * For more information see: https://developers.google.com/maps/documentation/ios-sdk/styling + */ +@interface GMSMapStyle : NSObject + +/** + * Creates a style using a string containing JSON. + * + * Returns nil and populates |error| (if provided) if |style| is invalid. + */ ++ (GMS_NULLABLE_INSTANCETYPE)styleWithJSONString:(NSString *)style + error:(NSError *__autoreleasing GMS_NULLABLE_PTR *)error; + +/** + * Creates a style using a file containing JSON. + * + * Returns nil and populates |error| (if provided) if |style| is invalid, the file cannot be read, + * or the URL is not a file URL. + */ ++ (GMS_NULLABLE_INSTANCETYPE) + styleWithContentsOfFileURL:(NSURL *)fileURL + error:(NSError *__autoreleasing GMS_NULLABLE_PTR *)error; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapView+Animation.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapView+Animation.h new file mode 100755 index 0000000..d8b518d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapView+Animation.h @@ -0,0 +1,67 @@ +// +// GMSMapView+Animation.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSMapView (Animation) offers several animation helper methods. + * + * During any animation, retrieving the camera position through the camera + * property on GMSMapView returns an intermediate immutable GMSCameraPosition. + * This camera position will typically represent the most recently drawn frame. + */ +@interface GMSMapView (Animation) + +/** Animates the camera of this map to |cameraPosition|. */ +- (void)animateToCameraPosition:(GMSCameraPosition *)cameraPosition; + +/** + * As animateToCameraPosition:, but changes only the location of the camera + * (i.e., from the current location to |location|). + */ +- (void)animateToLocation:(CLLocationCoordinate2D)location; + +/** + * As animateToCameraPosition:, but changes only the zoom level of the camera. + * This value is clamped by [kGMSMinZoomLevel, kGMSMaxZoomLevel]. + */ +- (void)animateToZoom:(float)zoom; + +/** + * As animateToCameraPosition:, but changes only the bearing of the camera (in + * degrees). Zero indicates true north. + */ +- (void)animateToBearing:(CLLocationDirection)bearing; + +/** + * As animateToCameraPosition:, but changes only the viewing angle of the camera + * (in degrees). This value will be clamped to a minimum of zero (i.e., facing + * straight down) and between 30 and 45 degrees towards the horizon, depending + * on the relative closeness to the earth. + */ +- (void)animateToViewingAngle:(double)viewingAngle; + +/** + * Applies |cameraUpdate| to the current camera, and then uses the result as + * per animateToCameraPosition:. + */ +- (void)animateWithCameraUpdate:(GMSCameraUpdate *)cameraUpdate; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapView.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapView.h new file mode 100755 index 0000000..e75fba6 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMapView.h @@ -0,0 +1,459 @@ +// +// GMSMapView.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import +#import +#import + +@class GMSCameraPosition; +@class GMSCameraUpdate; +@class GMSCoordinateBounds; +@class GMSIndoorDisplay; +@class GMSMapLayer; +@class GMSMapStyle; +@class GMSMapView; +@class GMSMarker; +@class GMSOverlay; +@class GMSProjection; + +GMS_ASSUME_NONNULL_BEGIN + +/** Delegate for events on GMSMapView. */ +@protocol GMSMapViewDelegate + +@optional + +/** + * Called before the camera on the map changes, either due to a gesture, + * animation (e.g., by a user tapping on the "My Location" button) or by being + * updated explicitly via the camera or a zero-length animation on layer. + * + * @param gesture If YES, this is occuring due to a user gesture. +*/ +- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture; + +/** + * Called repeatedly during any animations or gestures on the map (or once, if + * the camera is explicitly set). This may not be called for all intermediate + * camera positions. It is always called for the final position of an animation + * or gesture. + */ +- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position; + +/** + * Called when the map becomes idle, after any outstanding gestures or + * animations have completed (or after the camera has been explicitly set). + */ +- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position; + +/** + * Called after a tap gesture at a particular coordinate, but only if a marker + * was not tapped. This is called before deselecting any currently selected + * marker (the implicit action for tapping on the map). + */ +- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called after a long-press gesture at a particular coordinate. + * + * @param mapView The map view that was tapped. + * @param coordinate The location that was tapped. + */ +- (void)mapView:(GMSMapView *)mapView didLongPressAtCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called after a marker has been tapped. + * + * @param mapView The map view that was tapped. + * @param marker The marker that was tapped. + * @return YES if this delegate handled the tap event, which prevents the map + * from performing its default selection behavior, and NO if the map + * should continue with its default selection behavior. + */ +- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker; + +/** + * Called after a marker's info window has been tapped. + */ +- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker; + +/** + * Called after a marker's info window has been long pressed. + */ +- (void)mapView:(GMSMapView *)mapView didLongPressInfoWindowOfMarker:(GMSMarker *)marker; + +/** + * Called after an overlay has been tapped. + * This method is not called for taps on markers. + * + * @param mapView The map view that was tapped. + * @param overlay The overlay that was tapped. + */ +- (void)mapView:(GMSMapView *)mapView didTapOverlay:(GMSOverlay *)overlay; + +/** + * Called after a POI has been tapped. + * + * @param mapView The map view that was tapped. + * @param placeID The placeID of the POI that was tapped. + * @param name The name of the POI that was tapped. + * @param location The location of the POI that was tapped. + */ +- (void)mapView:(GMSMapView *)mapView + didTapPOIWithPlaceID:(NSString *)placeID + name:(NSString *)name + location:(CLLocationCoordinate2D)location; + +/** + * Called when a marker is about to become selected, and provides an optional + * custom info window to use for that marker if this method returns a UIView. + * If you change this view after this method is called, those changes will not + * necessarily be reflected in the rendered version. + * + * The returned UIView must not have bounds greater than 500 points on either + * dimension. As there is only one info window shown at any time, the returned + * view may be reused between other info windows. + * + * Removing the marker from the map or changing the map's selected marker during + * this call results in undefined behavior. + * + * @return The custom info window for the specified marker, or nil for default + */ +- (UIView *GMS_NULLABLE_PTR)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker; + +/** + * Called when mapView:markerInfoWindow: returns nil. If this method returns a + * view, it will be placed within the default info window frame. If this method + * returns nil, then the default rendering will be used instead. + * + * @param mapView The map view that was pressed. + * @param marker The marker that was pressed. + * @return The custom view to display as contents in the info window, or nil to + * use the default content rendering instead + */ + +- (UIView *GMS_NULLABLE_PTR)mapView:(GMSMapView *)mapView markerInfoContents:(GMSMarker *)marker; + +/** + * Called when the marker's info window is closed. + */ +- (void)mapView:(GMSMapView *)mapView didCloseInfoWindowOfMarker:(GMSMarker *)marker; + +/** + * Called when dragging has been initiated on a marker. + */ +- (void)mapView:(GMSMapView *)mapView didBeginDraggingMarker:(GMSMarker *)marker; + +/** + * Called after dragging of a marker ended. + */ +- (void)mapView:(GMSMapView *)mapView didEndDraggingMarker:(GMSMarker *)marker; + +/** + * Called while a marker is dragged. + */ +- (void)mapView:(GMSMapView *)mapView didDragMarker:(GMSMarker *)marker; + +/** + * Called when the My Location button is tapped. + * + * @return YES if the listener has consumed the event (i.e., the default behavior should not occur), + * NO otherwise (i.e., the default behavior should occur). The default behavior is for the + * camera to move such that it is centered on the user location. + */ +- (BOOL)didTapMyLocationButtonForMapView:(GMSMapView *)mapView; + +/** + * Called when tiles have just been requested or labels have just started rendering. + */ +- (void)mapViewDidStartTileRendering:(GMSMapView *)mapView; + +/** + * Called when all tiles have been loaded (or failed permanently) and labels have been rendered. + */ +- (void)mapViewDidFinishTileRendering:(GMSMapView *)mapView; + +/** + * Called when map is stable (tiles loaded, labels rendered, camera idle) and overlay objects have + * been rendered. + */ +- (void)mapViewSnapshotReady:(GMSMapView *)mapView; + +@end + +/** + * Display types for GMSMapView. + */ +typedef enum { + /** Basic maps. The default. */ + kGMSTypeNormal = 1, + + /** Satellite maps with no labels. */ + kGMSTypeSatellite, + + /** Terrain maps. */ + kGMSTypeTerrain, + + /** Satellite maps with a transparent label overview. */ + kGMSTypeHybrid, + + /** No maps, no labels. Display of traffic data is not supported. */ + kGMSTypeNone, + +} GMSMapViewType; + +/** + * Rendering frame rates for GMSMapView. + */ +typedef enum { + /** Use the minimum frame rate to conserve battery usage. */ + kGMSFrameRatePowerSave, + + /** + * Use a median frame rate to provide smoother rendering and conserve processing cycles. + */ + kGMSFrameRateConservative, + + /** + * Use the maximum frame rate for a device. For low end devices this will be 30 FPS, + * for high end devices 60 FPS. + */ + kGMSFrameRateMaximum, + +} GMSFrameRate; + +/** + * This is the main class of the Google Maps SDK for iOS and is the entry point + * for all methods related to the map. + * + * The map should be instantiated via the convenience constructor + * [GMSMapView mapWithFrame:camera:]. It may also be created with the default + * [[GMSMapView alloc] initWithFrame:] method (wherein its camera will be set to + * a default location). + * + * GMSMapView can only be read and modified from the main thread, similar to all + * UIKit objects. Calling these methods from another thread will result in an + * exception or undefined behavior. + */ +@interface GMSMapView : UIView + +/** GMSMapView delegate. */ +@property(nonatomic, weak) IBOutlet id GMS_NULLABLE_PTR delegate; + +/** + * Controls the camera, which defines how the map is oriented. Modification of + * this property is instantaneous. + */ +@property(nonatomic, copy) GMSCameraPosition *camera; + +/** + * Returns a GMSProjection object that you can use to convert between screen + * coordinates and latitude/longitude coordinates. + * + * This is a snapshot of the current projection, and will not automatically + * update when the camera moves. It represents either the projection of the last + * drawn GMSMapView frame, or; where the camera has been explicitly set or the + * map just created, the upcoming frame. It will never be nil. + */ +@property(nonatomic, readonly) GMSProjection *projection; + +/** + * Controls whether the My Location dot and accuracy circle is enabled. + * Defaults to NO. + */ +@property(nonatomic, assign, getter=isMyLocationEnabled) BOOL myLocationEnabled; + +/** + * If My Location is enabled, reveals where the user location dot is being + * drawn. If it is disabled, or it is enabled but no location data is available, + * this will be nil. This property is observable using KVO. + */ +@property(nonatomic, strong, readonly) CLLocation *GMS_NULLABLE_PTR myLocation; + +/** + * The marker that is selected. Setting this property selects a particular + * marker, showing an info window on it. If this property is non-nil, setting + * it to nil deselects the marker, hiding the info window. This property is + * observable using KVO. + */ +@property(nonatomic, strong) GMSMarker *GMS_NULLABLE_PTR selectedMarker; + +/** + * Controls whether the map is drawing traffic data, if available. This is + * subject to the availability of traffic data. Defaults to NO. + */ +@property(nonatomic, assign, getter=isTrafficEnabled) BOOL trafficEnabled; + +/** + * Controls the type of map tiles that should be displayed. Defaults to + * kGMSTypeNormal. + */ +@property(nonatomic, assign) GMSMapViewType mapType; + +/** + * Controls the style of the map. + * + * A non-nil mapStyle will only apply if mapType is Normal. + */ +@property(nonatomic, strong, nullable) GMSMapStyle *mapStyle; + +/** + * Minimum zoom (the farthest the camera may be zoomed out). Defaults to + * kGMSMinZoomLevel. Modified with -setMinZoom:maxZoom:. + */ +@property(nonatomic, assign, readonly) float minZoom; + +/** + * Maximum zoom (the closest the camera may be to the Earth). Defaults to + * kGMSMaxZoomLevel. Modified with -setMinZoom:maxZoom:. + */ +@property(nonatomic, assign, readonly) float maxZoom; + +/** + * If set, 3D buildings will be shown where available. Defaults to YES. + * + * This may be useful when adding a custom tile layer to the map, in order to + * make it clearer at high zoom levels. Changing this value will cause all + * tiles to be briefly invalidated. + */ +@property(nonatomic, assign, getter=isBuildingsEnabled) BOOL buildingsEnabled; + +/** + * Sets whether indoor maps are shown, where available. Defaults to YES. + * + * If this is set to NO, caches for indoor data may be purged and any floor + * currently selected by the end-user may be reset. + */ +@property(nonatomic, assign, getter=isIndoorEnabled) BOOL indoorEnabled; + +/** + * Gets the GMSIndoorDisplay instance which allows to observe or control + * aspects of indoor data display. + */ +@property(nonatomic, strong, readonly) GMSIndoorDisplay *indoorDisplay; + +/** + * Gets the GMSUISettings object, which controls user interface settings for the + * map. + */ +@property(nonatomic, strong, readonly) GMSUISettings *settings; + +/** + * Controls the 'visible' region of the view. By applying padding an area + * around the edge of the view can be created which will contain map data + * but will not contain UI controls. + * + * If the padding is not balanced, the visual center of the view will move as + * appropriate. Padding will also affect the |projection| property so the + * visible region will not include the padding area. GMSCameraUpdate + * fitToBounds will ensure that both this padding and any padding requested + * will be taken into account. + * + * This property may be animated within a UIView-based animation block. + */ +@property(nonatomic, assign) UIEdgeInsets padding; + +/** + * Defaults to YES. If set to NO, GMSMapView will generate accessibility + * elements for overlay objects, such as GMSMarker and GMSPolyline. + * + * This property is as per the informal UIAcessibility protocol, except for the + * default value of YES. + */ +@property(nonatomic) BOOL accessibilityElementsHidden; + +/** + * Accessor for the custom CALayer type used for the layer. + */ +@property(nonatomic, readonly, retain) GMSMapLayer *layer; + +/** + * Controls the rendering frame rate. + * Default value is kGMSFrameRateMaximum. + */ +@property(nonatomic, assign) GMSFrameRate preferredFrameRate; + +/** + * Builds and returns a GMSMapView, with a frame and camera target. + */ ++ (instancetype)mapWithFrame:(CGRect)frame camera:(GMSCameraPosition *)camera; + +/** + * Tells this map to power up its renderer. This is optional and idempotent. + * + * This method is obsolete and deprecated and will be removed in a future release. + */ +- (void)startRendering __GMS_AVAILABLE_BUT_DEPRECATED; + +/** + * Tells this map to power down its renderer. This is optional and idempotent. + * + * This method is obsolete and deprecated and will be removed in a future release. + */ +- (void)stopRendering __GMS_AVAILABLE_BUT_DEPRECATED; + +/** + * Clears all markup that has been added to the map, including markers, + * polylines and ground overlays. This will not clear the visible location dot + * or reset the current mapType. + */ +- (void)clear; + +/** + * Sets |minZoom| and |maxZoom|. This method expects the minimum to be less than + * or equal to the maximum, and will throw an exception with name + * NSRangeException otherwise. + */ +- (void)setMinZoom:(float)minZoom maxZoom:(float)maxZoom; + +/** + * Build a GMSCameraPosition that presents |bounds| with |padding|. The camera + * will have a zero bearing and tilt (i.e., facing north and looking directly at + * the Earth). This takes the frame and padding of this GMSMapView into account. + * + * If the bounds is invalid this method will return a nil camera. + */ +- (GMSCameraPosition *GMS_NULLABLE_PTR)cameraForBounds:(GMSCoordinateBounds *)bounds + insets:(UIEdgeInsets)insets; + +/** + * Changes the camera according to |update|. + * The camera change is instantaneous (with no animation). + */ +- (void)moveCamera:(GMSCameraUpdate *)update; + +/** + * Check whether the given camera positions would practically cause the camera to be rendered the + * same, taking into account the level of precision and transformations used internally. + */ +- (BOOL)areEqualForRenderingPosition:(GMSCameraPosition *)position + position:(GMSCameraPosition *)otherPosition; + +@end + +/** + * Accessibility identifier for the compass button. + */ +extern NSString *const kGMSAccessibilityCompass; + +/** + * Accessibility identifier for the "my location" button. + */ +extern NSString *const kGMSAccessibilityMyLocation; + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMarker.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMarker.h new file mode 100755 index 0000000..ebf67ab --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMarker.h @@ -0,0 +1,192 @@ +// +// GMSMarker.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class GMSMarkerLayer; +@class GMSPanoramaView; +@class UIImage; + +GMS_ASSUME_NONNULL_BEGIN + +/** + * Animation types for GMSMarker. + */ +typedef enum { + /** No animation (default). */ + kGMSMarkerAnimationNone = 0, + + /** The marker will pop from its groundAnchor when added. */ + kGMSMarkerAnimationPop, +} GMSMarkerAnimation; + +/** + * A marker is an icon placed at a particular point on the map's surface. A + * marker's icon is drawn oriented against the device's screen rather than the + * map's surface; i.e., it will not necessarily change orientation due to map + * rotations, tilting, or zooming. + */ +@interface GMSMarker : GMSOverlay + +/** Marker position. Animated. */ +@property(nonatomic, assign) CLLocationCoordinate2D position; + +/** Snippet text, shown beneath the title in the info window when selected. */ +@property(nonatomic, copy) NSString *GMS_NULLABLE_PTR snippet; + +/** + * Marker icon to render. If left nil, uses a default SDK place marker. + * + * Supports animated images, but each frame must be the same size or the + * behavior is undefined. + * + * Supports the use of alignmentRectInsets to specify a reduced tap area. This + * also redefines how anchors are specified. For an animated image the + * value for the animation is used, not the individual frames. + */ +@property(nonatomic, strong) UIImage *GMS_NULLABLE_PTR icon; + +/** + * Marker view to render. If left nil, falls back to the |icon| property instead. + * + * Supports animation of all animatable properties of UIView, except |frame| and |center|. Changing + * these properties or their corresponding CALayer version, including |position|, is not supported. + * + * Note that the view behaves as if |clipsToBounds| is set to YES, regardless of its actual + * value. + */ +@property(nonatomic, strong) UIView *GMS_NULLABLE_PTR iconView; + +/** + * Controls whether the icon for this marker should be redrawn every frame. + * + * Note that when this changes from NO to YES, the icon is guaranteed to be redrawn next frame. + * + * Defaults to YES. + * Has no effect if |iconView| is nil. + */ +@property(nonatomic, assign) BOOL tracksViewChanges; + +/** + * Controls whether the info window for this marker should be redrawn every frame. + * + * Note that when this changes from NO to YES, the info window is guaranteed to be redrawn next + * frame. + * + * Defaults to NO. + */ +@property(nonatomic, assign) BOOL tracksInfoWindowChanges; + +/** + * The ground anchor specifies the point in the icon image that is anchored to + * the marker's position on the Earth's surface. This point is specified within + * the continuous space [0.0, 1.0] x [0.0, 1.0], where (0,0) is the top-left + * corner of the image, and (1,1) is the bottom-right corner. + * + * If the image has non-zero alignmentRectInsets, the top-left and bottom-right + * mentioned above refer to the inset section of the image. + */ +@property(nonatomic, assign) CGPoint groundAnchor; + +/** + * The info window anchor specifies the point in the icon image at which to + * anchor the info window, which will be displayed directly above this point. + * This point is specified within the same space as groundAnchor. + */ +@property(nonatomic, assign) CGPoint infoWindowAnchor; + +/** + * Controls the animation used when this marker is placed on a GMSMapView + * (default kGMSMarkerAnimationNone, no animation). + */ +@property(nonatomic, assign) GMSMarkerAnimation appearAnimation; + +/** + * Controls whether this marker can be dragged interactively (default NO). + */ +@property(nonatomic, assign, getter=isDraggable) BOOL draggable; + +/** + * Controls whether this marker should be flat against the Earth's surface (YES) + * or a billboard facing the camera (NO, default). + */ +@property(nonatomic, assign, getter=isFlat) BOOL flat; + +/** + * Sets the rotation of the marker in degrees clockwise about the marker's + * anchor point. The axis of rotation is perpendicular to the marker. A rotation + * of 0 corresponds to the default position of the marker. Animated. + * + * When the marker is flat on the map, the default position is north aligned and + * the rotation is such that the marker always remains flat on the map. When the + * marker is a billboard, the default position is pointing up and the rotation + * is such that the marker is always facing the camera. + */ +@property(nonatomic, assign) CLLocationDegrees rotation; + +/** + * Sets the opacity of the marker, between 0 (completely transparent) and 1 + * (default) inclusive. + */ +@property(nonatomic, assign) float opacity; + +/** + * Marker data. You can use this property to associate an arbitrary object with + * this marker. Google Maps SDK for iOS neither reads nor writes this property. + * + * Note that userData should not hold any strong references to any Maps + * objects, otherwise a loop may be created (preventing ARC from releasing + * objects). + */ +@property(nonatomic, strong) id GMS_NULLABLE_PTR userData; + +/** + * Provides the Core Animation layer for this GMSMarker. + */ +@property(nonatomic, strong, readonly) GMSMarkerLayer *layer; + +/** + * The |panoramaView| specifies which panorama view will attempt to show this + * marker. Note that if the marker's |position| is too far away from the + * |panoramaView|'s current panorama location, it will not be displayed as it + * will be too small. + * Can be set to nil to remove the marker from any current panorama view it + * is attached to. + * A marker can be shown on both a panorama and a map at the same time. + */ +@property(nonatomic, weak) GMSPanoramaView *GMS_NULLABLE_PTR panoramaView; + +/** Convenience constructor for a default marker. */ ++ (instancetype)markerWithPosition:(CLLocationCoordinate2D)position; + +/** Creates a tinted version of the default marker image for use as an icon. */ ++ (UIImage *)markerImageWithColor:(UIColor *GMS_NULLABLE_PTR)color; + +@end + +/** + * The default position of the ground anchor of a GMSMarker: the center bottom + * point of the marker icon. + */ +FOUNDATION_EXTERN const CGPoint kGMSMarkerDefaultGroundAnchor; + +/** + * The default position of the info window anchor of a GMSMarker: the center top + * point of the marker icon. + */ +FOUNDATION_EXTERN const CGPoint kGMSMarkerDefaultInfoWindowAnchor; + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMarkerLayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMarkerLayer.h new file mode 100755 index 0000000..9f41e2b --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMarkerLayer.h @@ -0,0 +1,52 @@ +// +// GMSMarkerLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSMarkerLayer is a custom subclass of CALayer, available on a per-marker + * basis, that allows animation of several properties of its associated + * GMSMarker. + * + * Note that this CALayer is never actually rendered directly, as GMSMapView is + * provided entirely via an OpenGL layer. As such, adjustments or animations to + * 'default' properties of CALayer will not have any effect. + */ +@interface GMSMarkerLayer : CALayer + +/** Latitude, part of |position| on GMSMarker. */ +@property(nonatomic, assign) CLLocationDegrees latitude; + +/** Longitude, part of |position| on GMSMarker. */ +@property(nonatomic, assign) CLLocationDegrees longitude; + +/** Rotation, as per GMSMarker. */ +@property(nonatomic, assign) CLLocationDegrees rotation; + +/** Opacity, as per GMSMarker. */ +@property float opacity; + +@end + +extern NSString *const kGMSMarkerLayerLatitude; +extern NSString *const kGMSMarkerLayerLongitude; +extern NSString *const kGMSMarkerLayerRotation; +extern NSString *const kGMSMarkerLayerOpacity; + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMutablePath.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMutablePath.h new file mode 100755 index 0000000..4f0100c --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSMutablePath.h @@ -0,0 +1,61 @@ +// +// GMSMutablePath.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import +#import + +/** + * GMSMutablePath is a dynamic (resizable) array of CLLocationCoordinate2D. All coordinates must be + * valid. GMSMutablePath is the mutable counterpart to the immutable GMSPath. + */ +@interface GMSMutablePath : GMSPath + +/** Adds |coord| at the end of the path. */ +- (void)addCoordinate:(CLLocationCoordinate2D)coord; + +/** Adds a new CLLocationCoordinate2D instance with the given lat/lng. */ +- (void)addLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude; + +/** + * Inserts |coord| at |index|. + * + * If this is smaller than the size of the path, shifts all coordinates forward by one. Otherwise, + * behaves as replaceCoordinateAtIndex:withCoordinate:. + */ +- (void)insertCoordinate:(CLLocationCoordinate2D)coord atIndex:(NSUInteger)index; + +/** + * Replace the coordinate at |index| with |coord|. If |index| is after the end, grows the array with + * an undefined coordinate. + */ +- (void)replaceCoordinateAtIndex:(NSUInteger)index + withCoordinate:(CLLocationCoordinate2D)coord; + +/** + * Remove entry at |index|. + * + * If |index| < count decrements size. If |index| >= count this is a silent + * no-op. + */ +- (void)removeCoordinateAtIndex:(NSUInteger)index; + +/** + * Removes the last coordinate of the path. + * + * If the array is non-empty decrements size. If the array is empty, this is a silent no-op. + */ +- (void)removeLastCoordinate; + +/** Removes all coordinates in this path. */ +- (void)removeAllCoordinates; + +@end diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSOrientation.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSOrientation.h new file mode 100755 index 0000000..c30342d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSOrientation.h @@ -0,0 +1,40 @@ +// +// GMSOrientation.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** + * GMSOrientation is a tuple of heading and pitch used to control the viewing direction of a + * GMSPanoramaCamera. + */ +typedef struct { + /** The camera heading (horizontal angle) in degrees. */ + const CLLocationDirection heading; + + /** + * The camera pitch (vertical angle), in degrees from the horizon. The |pitch| range is [-90,90], + * although it is possible that not the full range is supported. + */ + const double pitch; +} GMSOrientation; + +#ifdef __cplusplus +extern "C" { +#endif + +/** Returns a GMSOrientation with the given |heading| and |pitch|. */ +inline static GMSOrientation GMSOrientationMake(CLLocationDirection heading, double pitch) { + GMSOrientation orientation = {heading, pitch}; + return orientation; +} + +#ifdef __cplusplus +} +#endif diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSOverlay.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSOverlay.h new file mode 100755 index 0000000..6603ea2 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSOverlay.h @@ -0,0 +1,66 @@ +// +// GMSOverlay.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +@class GMSMapView; + +/** + * GMSOverlay is an abstract class that represents some overlay that may be + * attached to a specific GMSMapView. It may not be instantiated directly; + * instead, instances of concrete overlay types should be created directly + * (such as GMSMarker, GMSPolyline, and GMSPolygon). + * + * This supports the NSCopying protocol; [overlay_ copy] will return a copy + * of the overlay type, but with |map| set to nil. + */ +@interface GMSOverlay : NSObject + +/** + * Title, a short description of the overlay. Some overlays, such as markers, + * will display the title on the map. The title is also the default + * accessibility text. + */ +@property(nonatomic, copy) NSString *GMS_NULLABLE_PTR title; + +/** + * The map this overlay is on. Setting this property will add the overlay to the + * map. Setting it to nil removes this overlay from the map. An overlay may be + * active on at most one map at any given time. + */ +@property(nonatomic, weak) GMSMapView *GMS_NULLABLE_PTR map; + +/** + * If this overlay should cause tap notifications. Some overlays, such as + * markers, will default to being tappable. + */ +@property(nonatomic, assign, getter=isTappable) BOOL tappable; + +/** + * Higher |zIndex| value overlays will be drawn on top of lower |zIndex| + * value tile layers and overlays. Equal values result in undefined draw + * ordering. Markers are an exception that regardless of |zIndex|, they will + * always be drawn above tile layers and other non-marker overlays; they + * are effectively considered to be in a separate z-index group compared to + * other overlays. + */ +@property(nonatomic, assign) int zIndex; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanorama.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanorama.h new file mode 100755 index 0000000..3f90436 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanorama.h @@ -0,0 +1,40 @@ +// +// GMSPanorama.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +@class GMSPanoramaLink; + +/** + * GMSPanorama represents metadata for a specific panorama on the Earth. This class is not + * instantiable directly and is obtained via GMSPanoramaService or GMSPanoramaView. + */ +@interface GMSPanorama : NSObject + +/** The precise location of this panorama. */ +@property(nonatomic, readonly) CLLocationCoordinate2D coordinate; + +/** The ID of this panorama. Panoramas may change ID over time, so this should not be persisted */ +@property(nonatomic, copy, readonly) NSString *panoramaID; + +/** An array of GMSPanoramaLink describing the neighboring panoramas. */ +@property(nonatomic, copy, readonly) GMS_NSArrayOf(GMSPanoramaLink *) * links; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaCamera.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaCamera.h new file mode 100755 index 0000000..bc33f94 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaCamera.h @@ -0,0 +1,86 @@ +// +// GMSPanoramaCamera.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSPanoramaCamera is used to control the viewing direction of a GMSPanoramaView. It does not + * contain information about which particular panorama should be displayed. + */ +@interface GMSPanoramaCamera : NSObject + +/** + * Designated initializer. Configures this GMSPanoramaCamera with |orientation|, |zoom| and |FOV|. + * These values will be clamped to acceptable ranges. + */ +- (id)initWithOrientation:(GMSOrientation)orientation zoom:(float)zoom FOV:(double)FOV; + +/** + * Convenience constructor specifying heading and pitch as part of |orientation|, plus |zoom| and + * default field of view (90 degrees). + */ ++ (instancetype)cameraWithOrientation:(GMSOrientation)orientation zoom:(float)zoom; + +/** + * Convenience constructor specifying |heading|, |pitch|, |zoom| with default field of view (90 + * degrees). + */ ++ (instancetype)cameraWithHeading:(CLLocationDirection)heading pitch:(double)pitch zoom:(float)zoom; + +/** + * Convenience constructor for GMSPanoramaCamera, specifying all camera properties with heading and + * pitch as part of |orientation|. + */ ++ (instancetype)cameraWithOrientation:(GMSOrientation)orientation zoom:(float)zoom FOV:(double)FOV; + +/** + * Convenience constructor for GMSPanoramaCamera, specifying all camera properties. + */ ++ (instancetype)cameraWithHeading:(CLLocationDirection)heading + pitch:(double)pitch + zoom:(float)zoom + FOV:(double)FOV; + +/** + * The field of view (FOV) encompassed by the larger dimension (width or height) of the view in + * degrees at zoom 1. This is clamped to the range [1, 160] degrees, and has a default value of 90. + * + * Lower FOV values produce a zooming in effect; larger FOV values produce an fisheye effect. + * + * Note: This is not the displayed FOV if zoom is anything other than 1. User zoom gestures + * control the zoom property, not this property. + */ +@property(nonatomic, assign, readonly) double FOV; + +/** + * Adjusts the visible region of the screen. A zoom of N will show the same area as the central + * width/N height/N area of what is shown at zoom 1. + * + * Zoom is clamped to the implementation defined range [1, 5]. + */ +@property(nonatomic, assign, readonly) float zoom; + +/** + * The camera orientation, which groups together heading and pitch. + */ +@property(nonatomic, assign, readonly) GMSOrientation orientation; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaCameraUpdate.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaCameraUpdate.h new file mode 100755 index 0000000..7188f9d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaCameraUpdate.h @@ -0,0 +1,35 @@ +// +// GMSPanoramaCameraUpdate.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +@interface GMSPanoramaCameraUpdate : NSObject + +/** Returns an update that increments the camera heading with |deltaHeading|. */ ++ (GMSPanoramaCameraUpdate *)rotateBy:(CGFloat)deltaHeading; + +/** Returns an update that sets the camera heading to the given value. */ ++ (GMSPanoramaCameraUpdate *)setHeading:(CGFloat)heading; + +/** Returns an update that sets the camera pitch to the given value. */ ++ (GMSPanoramaCameraUpdate *)setPitch:(CGFloat)pitch; + +/** Returns an update that sets the camera zoom to the given value. */ ++ (GMSPanoramaCameraUpdate *)setZoom:(CGFloat)zoom; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaLayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaLayer.h new file mode 100755 index 0000000..51100a2 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaLayer.h @@ -0,0 +1,47 @@ +// +// GMSPanoramaLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** kGMSLayerPanoramaHeadingKey ranges from [0, 360). */ +extern NSString *const kGMSLayerPanoramaHeadingKey; + +/** kGMSLayerPanoramaPitchKey ranges from [-90, 90]. */ +extern NSString *const kGMSLayerPanoramaPitchKey; + +/** kGMSLayerCameraZoomLevelKey ranges from [1, 5], default 1. */ +extern NSString *const kGMSLayerPanoramaZoomKey; + +/** kGMSLayerPanoramaFOVKey ranges from [1, 160] (in degrees), default 90. */ +extern NSString *const kGMSLayerPanoramaFOVKey; + +/** + * GMSPanoramaLayer is a custom subclass of CALayer, provided as the layer + * class on GMSPanoramaView. This layer should not be instantiated directly. + */ +@interface GMSPanoramaLayer : GMSCALayer +@property(nonatomic, assign) CLLocationDirection cameraHeading; +@property(nonatomic, assign) double cameraPitch; +@property(nonatomic, assign) float cameraZoom; +@property(nonatomic, assign) double cameraFOV; +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaLink.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaLink.h new file mode 100755 index 0000000..c48a6e8 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaLink.h @@ -0,0 +1,33 @@ +// +// GMSPanoramaLink.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** Links from a GMSPanorama to neighboring panoramas. */ +@interface GMSPanoramaLink : NSObject + +/** Angle of the neighboring panorama, clockwise from north in degrees. */ +@property(nonatomic, assign) CGFloat heading; + +/** + * Panorama ID for the neighboring panorama. + * Do not store this persistenly, it changes in time. + */ +@property(nonatomic, copy) NSString *panoramaID; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaService.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaService.h new file mode 100755 index 0000000..80fae9e --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaService.h @@ -0,0 +1,62 @@ +// +// GMSPanoramaService.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class GMSPanorama; + +GMS_ASSUME_NONNULL_BEGIN + +/** + * Callback for when a panorama metadata becomes available. + * If an error occured, |panorama| is nil and |error| is not nil. + * Otherwise, |panorama| is not nil and |error| is nil. + */ +typedef void (^GMSPanoramaCallback)(GMSPanorama *GMS_NULLABLE_PTR panorama, + NSError *GMS_NULLABLE_PTR error); + +/** + * GMSPanoramaService can be used to request panorama metadata even when a + * GMSPanoramaView is not active. + * Get an instance like this: [[GMSPanoramaService alloc] init]. + */ +@interface GMSPanoramaService : NSObject + +/** + * Retrieves information about a panorama near the given |coordinate|. + * This is an asynchronous request, |callback| will be called with the result. + */ +- (void)requestPanoramaNearCoordinate:(CLLocationCoordinate2D)coordinate + callback:(GMSPanoramaCallback)callback; + +/** + * Similar to requestPanoramaNearCoordinate:callback: but allows specifying + * a search radius (meters) around |coordinate|. + */ +- (void)requestPanoramaNearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius + callback:(GMSPanoramaCallback)callback; + +/** + * Retrieves information about a panorama with the given |panoramaID|. + * |callback| will be called with the result. Only panoramaIDs obtained + * from the Google Maps SDK for iOS are supported. + */ +- (void)requestPanoramaWithID:(NSString *)panoramaID callback:(GMSPanoramaCallback)callback; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaView.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaView.h new file mode 100755 index 0000000..9fad276 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPanoramaView.h @@ -0,0 +1,268 @@ +// +// GMSPanoramaView.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import +#import + +@class GMSMarker; +@class GMSPanorama; +@class GMSPanoramaCamera; +@class GMSPanoramaCameraUpdate; +@class GMSPanoramaView; + +GMS_ASSUME_NONNULL_BEGIN + +/** Delegate for events on GMSPanoramaView. */ +@protocol GMSPanoramaViewDelegate +@optional + +/** + * Called when starting a move to another panorama. + * This can be the result of interactive navigation to a neighbouring panorama. + * At the moment this method is called, the |view|.panorama is still + * pointing to the old panorama, as the new panorama identified by |panoID| + * is not yet resolved. panoramaView:didMoveToPanorama: will be called when the + * new panorama is ready. + */ +- (void)panoramaView:(GMSPanoramaView *)view + willMoveToPanoramaID:(NSString *)panoramaID; + +/** + * This is invoked every time the |view|.panorama property changes. + */ +- (void)panoramaView:(GMSPanoramaView *)view + didMoveToPanorama:(GMSPanorama *GMS_NULLABLE_PTR)panorama; + +/** + * Called when the panorama change was caused by invoking + * moveToPanoramaNearCoordinate:. The coordinate passed to that method will also + * be passed here. + */ +- (void)panoramaView:(GMSPanoramaView *)view + didMoveToPanorama:(GMSPanorama *)panorama + nearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called when moveNearCoordinate: produces an error. + */ +- (void)panoramaView:(GMSPanoramaView *)view + error:(NSError *)error + onMoveNearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Called when moveToPanoramaID: produces an error. + */ +- (void)panoramaView:(GMSPanoramaView *)view + error:(NSError *)error + onMoveToPanoramaID:(NSString *)panoramaID; + +/** + * Called repeatedly during changes to the camera on GMSPanoramaView. This may + * not be called for all intermediate camera values, but is always called for + * the final position of the camera after an animation or gesture. + */ +- (void)panoramaView:(GMSPanoramaView *)panoramaView + didMoveCamera:(GMSPanoramaCamera *)camera; + +/** + * Called when a user has tapped on the GMSPanoramaView, but this tap was not + * consumed (taps may be consumed by e.g., tapping on a navigation arrow). + */ +- (void)panoramaView:(GMSPanoramaView *)panoramaView didTap:(CGPoint)point; + +/** + * Called after a marker has been tapped. May return YES to indicate the event + * has been fully handled and suppress any default behavior. + */ +- (BOOL)panoramaView:(GMSPanoramaView *)panoramaView + didTapMarker:(GMSMarker *)marker; + +/** + * Called when the panorama tiles for the current view have just been requested + * and are beginning to load. + */ +- (void)panoramaViewDidStartRendering:(GMSPanoramaView *)panoramaView; + +/** + * Called when the panorama tiles have been loaded (or permanently failed to load) + * and rendered on screen. + */ +- (void)panoramaViewDidFinishRendering:(GMSPanoramaView *)panoramaView; + +@end + +/** + * A panorama is used to display Street View imagery. It should be constructed + * via [[GMSPanoramaView alloc] initWithFrame:], and configured + * post-initialization. + * + * All properties and methods should be accessed on the main thread, similar to + * all UIKit objects. The GMSPanoramaViewDelegate methods will also be called + * back only on the main thread. + * + * The backgroundColor of this view is shown while no panorama is visible, such + * as while it is loading or if the panorama is later set to nil. The alpha + * color of backgroundColor is not supported. + */ +@interface GMSPanoramaView : UIView + +/** + * The panorama to display; setting it will transition to a new panorama. This + * is animated, except for the initial panorama. + * + * Can be set to nil to clear the view. + */ +@property(nonatomic, strong) GMSPanorama *GMS_NULLABLE_PTR panorama; + +/** GMSPanoramaView delegate. */ +@property(nonatomic, weak) IBOutlet id GMS_NULLABLE_PTR delegate; + +/** + * Sets the preference for whether all gestures should be enabled (default) or + * disabled. + * This does not limit programmatic movement of the camera or control of the + * panorama. + */ +- (void)setAllGesturesEnabled:(BOOL)enabled; + +/** + * Controls whether orientation gestures are enabled (default) or disabled. If + * enabled, users may use gestures to change the orientation of the camera. + * This does not limit programmatic movement of the camera. + */ +@property(nonatomic, assign) BOOL orientationGestures; + +/** + * Controls whether zoom gestures are enabled (default) or disabled. If + * enabled, users may pinch to zoom the camera. + * This does not limit programmatic movement of the camera. + */ +@property(nonatomic, assign) BOOL zoomGestures; + +/** + * Controls whether navigation gestures are enabled (default) or disabled. If + * enabled, users may use a single tap on navigation links or double tap the + * view to change panoramas. + * This does not limit programmatic control of the panorama. + */ +@property(nonatomic, assign) BOOL navigationGestures; + +/** + * Controls whether the tappable navigation links are hidden or visible + * (default). + * Hidden navigation links cannot be tapped. + */ +@property(nonatomic, assign) BOOL navigationLinksHidden; + +/** + * Controls whether the street name overlays are hidden or visible (default). + */ +@property(nonatomic, assign) BOOL streetNamesHidden; + +/** + * Controls the panorama's camera. Setting a new camera here jumps to the new + * camera value, with no animation. + */ +@property(nonatomic, strong) GMSPanoramaCamera *camera; + +/** + * Accessor for the custom CALayer type used for the layer. + */ +@property(nonatomic, readonly, retain) GMSPanoramaLayer *layer; + +/** + * Animates the camera of this GMSPanoramaView to |camera|, over |duration| + * (specified in seconds). + */ +- (void)animateToCamera:(GMSPanoramaCamera *)camera + animationDuration:(NSTimeInterval)duration; + +/** + * Modifies the camera according to |cameraUpdate|, over |duration| (specified + * in seconds). + */ +- (void)updateCamera:(GMSPanoramaCameraUpdate *)cameraUpdate + animationDuration:(NSTimeInterval)duration; + +/** + * Requests a panorama near |coordinate|. + * Upon successful completion panoramaView:didMoveToPanorama: and + * panoramaView:didMoveToPanorama:nearCoordinate: will be sent to + * GMSPanoramaViewDelegate. + * On error panoramaView:error:onMoveNearCoordinate: will be sent. + * Repeated calls to moveNearCoordinate: result in the previous pending + * (incomplete) transitions being cancelled -- only the most recent of + * moveNearCoordinate: and moveToPanoramaId: will proceed and generate events. + */ +- (void)moveNearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Similar to moveNearCoordinate: but allows specifying a search radius (meters) + * around |coordinate|. + */ +- (void)moveNearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius; + +/** + * Requests a panorama with |panoramaID|. + * Upon successful completion panoramaView:didMoveToPanorama: will be sent to + * GMSPanoramaViewDelegate. + * On error panoramaView:error:onMoveToPanoramaID: will be sent. + * Repeated calls to moveToPanoramaID: result in the previous pending + * (incomplete) transitions being cancelled -- only the most recent of + * moveNearCoordinate: and moveToPanoramaId: will proceed and generate events. + * Only panoramaIDs obtained from the Google Maps SDK for iOS are supported. + */ +- (void)moveToPanoramaID:(NSString *)panoramaID; + +/** + * For the current view, returns the screen point the |orientation| points + * through. This value may be outside the view for forward facing orientations + * which are far enough away from straight ahead. + * The result will contain NaNs for camera orientations which point away from + * the view, where the implied screen point would have had a negative distance + * from the camera in the direction of orientation. + */ +- (CGPoint)pointForOrientation:(GMSOrientation)orientation; + +/** + * Given a point for this view, returns the current camera orientation pointing + * through that screen location. At the center of this view, the returned + * GMSOrientation will be approximately equal to that of the current + * GMSPanoramaCamera. + */ +- (GMSOrientation)orientationForPoint:(CGPoint)point; + +/** + * Convenience constructor for GMSPanoramaView, which searches for and displays + * a GMSPanorama near |coordinate|. This performs a similar action to that of + * moveNearCoordinate:, and will call the same delegate methods. + */ ++ (instancetype)panoramaWithFrame:(CGRect)frame + nearCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Similar to panoramaWithFrame:nearCoordinate: but allows specifying a + * search radius (meters) around |coordinate|. + */ ++ (instancetype)panoramaWithFrame:(CGRect)frame + nearCoordinate:(CLLocationCoordinate2D)coordinate + radius:(NSUInteger)radius; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPath.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPath.h new file mode 100755 index 0000000..3e77d10 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPath.h @@ -0,0 +1,111 @@ +// +// GMSPath.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSPath encapsulates an immutable array of CLLocationCooordinate2D. All the coordinates of a + * GMSPath must be valid. The mutable counterpart is GMSMutablePath. + */ +@interface GMSPath : NSObject + +/** Convenience constructor for an empty path. */ ++ (instancetype)path; + +/** Initializes a newly allocated path with the contents of another GMSPath. */ +- (id)initWithPath:(GMSPath *)path; + +/** Get size of path. */ +- (NSUInteger)count; + +/** Returns kCLLocationCoordinate2DInvalid if |index| >= count. */ +- (CLLocationCoordinate2D)coordinateAtIndex:(NSUInteger)index; + +/** + * Initializes a newly allocated path from |encodedPath|. This format is described at: + * https://developers.google.com/maps/documentation/utilities/polylinealgorithm + */ ++ (GMS_NULLABLE_INSTANCETYPE)pathFromEncodedPath:(NSString *)encodedPath; + +/** Returns an encoded string of the path in the format described above. */ +- (NSString *)encodedPath; + +/** + * Returns a new path obtained by adding |deltaLatitude| and |deltaLongitude| to each coordinate + * of the current path. Does not modify the current path. + */ +- (instancetype)pathOffsetByLatitude:(CLLocationDegrees)deltaLatitude + longitude:(CLLocationDegrees)deltaLongitude; + +@end + +/** + * kGMSEquatorProjectedMeter may be useful when specifying lengths for segment in "projected" units. + * The value of kGMSEquatorProjectedMeter, 1/(pi * EarthRadius), represents the length of one meter + * at the equator in projected units. For example to specify a projected length that corresponds + * to 100km at the equator use 100000 * kGMSEquatorProjectedMeter. + * See [GMSPath segmentsForLength:kind:], [GMSPath lengthOfKind:] and kGMSLengthProjected. + */ +extern const double kGMSEquatorProjectedMeter; + +/** + * GMSLengthKind indicates the type of a length value, which can be geodesic (in meters), rhumb + * length (in meters) and projected length (in GMSMapPoint units). + */ +typedef enum { + /* + * Geodesic length, in meters, along geodesic segments. May be useful, for example, to specify + * lengths along the the trajectory of airplanes or ships. + */ + kGMSLengthGeodesic, + + /* + * Rhumb length, in meters, along rhumb (straight line) segments. May be useful, for example, to + * draw a scale bar on a map. The visual size of a segment of a given length depens on the + * latitude. + */ + kGMSLengthRhumb, + + /* + * Length in projected space, along rhumb segments. Projected length uses the same units as + * GMSMapPoint - the Earth equator circumference has length 2. It is possible to specify projected + * length in units corresponding to 1 meter at the equator by multiplying with + * kGMSEquatorProjectedMeter, equal to 1/(pi * EarthRadius). + * + * Projected length may be useful, for example, to specify segments with the same visual length + * regardless of latitude. + */ + kGMSLengthProjected +} GMSLengthKind; + +@interface GMSPath (GMSPathLength) + +/** + * Returns the fractional number of segments along the path that correspond to |length|, + * interpreted according to |kind|. See GMSLengthKind. + */ +- (double)segmentsForLength:(CLLocationDistance)length kind:(GMSLengthKind)kind; + +/** + * Returns the length of the path, according to |kind|. See GMSLengthKind. + */ +- (CLLocationDistance)lengthOfKind:(GMSLengthKind)kind; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPolygon.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPolygon.h new file mode 100755 index 0000000..a0e1c66 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPolygon.h @@ -0,0 +1,58 @@ +// +// GMSPolygon.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import + +GMS_ASSUME_NONNULL_BEGIN + +@class GMSPath; + +/** + * GMSPolygon defines a polygon that appears on the map. A polygon (like a polyline) defines a + * series of connected coordinates in an ordered sequence; additionally, polygons form a closed loop + * and define a filled region. + */ +@interface GMSPolygon : GMSOverlay + +/** The path that describes this polygon. The coordinates composing the path must be valid. */ +@property(nonatomic, copy) GMSPath *GMS_NULLABLE_PTR path; + +/** + * The array of GMSPath instances that describes any holes in this polygon. The coordinates + * composing each path must be valid. + */ +@property(nonatomic, copy) GMS_NSArrayOf(GMSPath *) * GMS_NULLABLE_PTR holes; + +/** The width of the polygon outline in screen points. Defaults to 1. */ +@property(nonatomic, assign) CGFloat strokeWidth; + +/** The color of the polygon outline. Defaults to nil. */ +@property(nonatomic, strong) UIColor *GMS_NULLABLE_PTR strokeColor; + +/** The fill color. Defaults to blueColor. */ +@property(nonatomic, strong) UIColor *GMS_NULLABLE_PTR fillColor; + +/** Whether this polygon should be rendered with geodesic correction. */ +@property(nonatomic, assign) BOOL geodesic; + +/** + * Convenience constructor for GMSPolygon for a particular path. Other properties will have default + * values. + */ ++ (instancetype)polygonWithPath:(GMSPath *GMS_NULLABLE_PTR)path; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPolyline.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPolyline.h new file mode 100755 index 0000000..8ac0bc5 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSPolyline.h @@ -0,0 +1,109 @@ +// +// GMSPolyline.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif +#import + +@class GMSPath; + +GMS_ASSUME_NONNULL_BEGIN + +/** Describes the drawing style for one-dimensional entities such as polylines. */ +@interface GMSStrokeStyle : NSObject + +/** Creates a solid color stroke style. */ ++ (instancetype)solidColor:(UIColor *)color; + +/** Creates a gradient stroke style interpolating from |fromColor| to |toColor|. */ ++ (instancetype)gradientFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor; + +@end + +/** Describes the style for some region of a polyline. */ +@interface GMSStyleSpan : NSObject + +/** + * Factory returning a solid color span of length one segment. Equivalent to + * [GMSStyleSpan spanWithStyle:[GMSStrokeStyle solidColor:|color|] segments:1]. + */ ++ (instancetype)spanWithColor:(UIColor *)color; + +/** + * Factory returning a solid color span with a given number of segments. Equivalent to + * [GMSStyleSpan spanWithStyle:[GMSStrokeStyle solidColor:|color|] segments:|segments|]. + */ ++ (instancetype)spanWithColor:(UIColor *)color segments:(double)segments; + +/** + * Factory returning a span with the given |style| of length one segment. Equivalent to + * [GMSStyleSpan spanWithStyle:|style| segments:1]. + */ ++ (instancetype)spanWithStyle:(GMSStrokeStyle *)style; + +/** + * Factory returning a span with the given |style| and length in number of segments. + * |segments| must be greater than 0 (i.e. can't be 0). + */ ++ (instancetype)spanWithStyle:(GMSStrokeStyle *)style segments:(double)segments; + +/** The style of this span. */ +@property(nonatomic, readonly) GMSStrokeStyle *style; + +/** The length of this span in number of segments. */ +@property(nonatomic, readonly) double segments; + +@end + +/** + * GMSPolyline specifies the available options for a polyline that exists on the Earth's surface. + * It is drawn as a physical line between the points specified in |path|. + */ +@interface GMSPolyline : GMSOverlay + +/** + * The path that describes this polyline. + */ +@property(nonatomic, copy) GMSPath *GMS_NULLABLE_PTR path; + +/** + * The width of the line in screen points. Defaults to 1. + */ +@property(nonatomic, assign) CGFloat strokeWidth; + +/** + * The UIColor used to render the polyline. Defaults to [UIColor blueColor]. + */ +@property(nonatomic, strong) UIColor *strokeColor; + +/** Whether this line should be rendered with geodesic correction. */ +@property(nonatomic, assign) BOOL geodesic; + +/** + * Convenience constructor for GMSPolyline for a particular path. Other properties will have + * default values. + */ ++ (instancetype)polylineWithPath:(GMSPath *GMS_NULLABLE_PTR)path; + +/** + * An array containing GMSStyleSpan, the spans used to render this polyline. + * + * If this array contains fewer segments than the polyline itself, the final segment will be applied + * over the remaining length. If this array is unset or empty, then |strokeColor| is used for the + * entire line instead. + */ +@property(nonatomic, copy) GMS_NSArrayOf(GMSStyleSpan *) * GMS_NULLABLE_PTR spans; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSProjection.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSProjection.h new file mode 100755 index 0000000..7596dba --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSProjection.h @@ -0,0 +1,75 @@ +// +// GMSProjection.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +/** + * GMSVisibleRegion contains the four points defining the polygon that is visible in a map's camera. + * + * This polygon can be a trapezoid instead of a rectangle, because a camera can have tilt. If the + * camera is directly over the center of the camera, the shape is rectangular, but if the camera is + * tilted, the shape will appear to be a trapezoid whose smallest side is closest to the point of + * view. + */ +typedef struct { + + /** Bottom left corner of the camera. */ + CLLocationCoordinate2D nearLeft; + + /** Bottom right corner of the camera. */ + CLLocationCoordinate2D nearRight; + + /** Far left corner of the camera. */ + CLLocationCoordinate2D farLeft; + + /** Far right corner of the camera. */ + CLLocationCoordinate2D farRight; +} GMSVisibleRegion; + +/** + * Defines a mapping between Earth coordinates (CLLocationCoordinate2D) and coordinates in the map's + * view (CGPoint). A projection is constant and immutable, in that the mapping it embodies never + * changes. The mapping is not necessarily linear. + * + * Passing invalid Earth coordinates (i.e., per CLLocationCoordinate2DIsValid) to this object may + * result in undefined behavior. + * + * This class should not be instantiated directly, instead, obtained via projection on GMSMapView. + */ +@interface GMSProjection : NSObject + +/** Maps an Earth coordinate to a point coordinate in the map's view. */ +- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; + +/** Maps a point coordinate in the map's view to an Earth coordinate. */ +- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point; + +/** + * Converts a distance in meters to content size. This is only accurate for small Earth distances, + * as it uses CGFloat for screen distances. + */ +- (CGFloat)pointsForMeters:(CLLocationDistance)meters + atCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns whether a given coordinate (lat/lng) is contained within the projection. + */ +- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns the region (four location coordinates) that is visible according to the projection. If + * padding was set on GMSMapView, this region takes the padding into account. + * + * The visible region can be non-rectangular. The result is undefined if the projection includes + * points that do not map to anywhere on the map (e.g., camera sees outer space). + */ +- (GMSVisibleRegion)visibleRegion; + +@end diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSServices.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSServices.h new file mode 100755 index 0000000..503314d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSServices.h @@ -0,0 +1,61 @@ +// +// GMSServices.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** Service class for the Google Maps SDK for iOS. */ +@interface GMSServices : NSObject + +/** + * Provides the shared instance of GMSServices for the Google Maps SDK for iOS, + * creating it if necessary. Classes such as GMSMapView and GMSPanoramaView will + * hold this instance to provide their connection to Google. + * + * This is an opaque object. If your application often creates and destroys view + * or service classes provided by the Google Maps SDK for iOS, it may be useful + * to hold onto this object directly, as otherwise your connection to Google + * may be restarted on a regular basis. It also may be useful to take this + * object in advance of the first map creation, to reduce initial map creation + * performance cost. + * + * This method will throw an exception if provideAPIKey: has not been called. + */ ++ (id)sharedServices; + +/** + * Provides your API key to the Google Maps SDK for iOS. This key is generated + * for your application via the Google APIs Console, and is paired with your + * application's bundle ID to identify it. This must be called exactly once + * by your application before any iOS Maps SDK object is initialized. + * + * @return YES if the APIKey was successfully provided + */ ++ (BOOL)provideAPIKey:(NSString *)APIKey; + +/** + * Returns the open source software license information for Google Maps SDK for + * iOS. This information must be made available within your application. + */ ++ (NSString *)openSourceLicenseInfo; + +/** + * Returns the version for this release of the Google Maps SDK for iOS. + */ ++ (NSString *)SDKVersion; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSSyncTileLayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSSyncTileLayer.h new file mode 100755 index 0000000..43fdb0a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSSyncTileLayer.h @@ -0,0 +1,39 @@ +// +// GMSSyncTileLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSSyncTileLayer is an abstract subclass of GMSTileLayer that provides a sync + * interface to generate image tile data. + */ +@interface GMSSyncTileLayer : GMSTileLayer + +/** + * As per requestTileForX:y:zoom:receiver: on GMSTileLayer, but provides a + * synchronous interface to return tiles. This method may block or otherwise + * perform work, and is not called on the main thread. + * + * Calls to this method may also be made from multiple threads so + * implementations must be threadsafe. + */ +- (UIImage *GMS_NULLABLE_PTR)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSTileLayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSTileLayer.h new file mode 100755 index 0000000..566a82d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSTileLayer.h @@ -0,0 +1,113 @@ +// +// GMSTileLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class GMSMapView; + +GMS_ASSUME_NONNULL_BEGIN + +/** + * Stub tile that is used to indicate that no tile exists for a specific tile + * coordinate. May be returned by tileForX:y:zoom: on GMSTileProvider. + */ +FOUNDATION_EXTERN UIImage *const kGMSTileLayerNoTile; + +/** + * GMSTileReceiver is provided to GMSTileLayer when a tile request is made, + * allowing the callback to be later (or immediately) invoked. + */ +@protocol GMSTileReceiver +- (void)receiveTileWithX:(NSUInteger)x + y:(NSUInteger)y + zoom:(NSUInteger)zoom + image:(UIImage *GMS_NULLABLE_PTR)image; +@end + +/** + * GMSTileLayer is an abstract class that allows overlaying of custom image + * tiles on a specified GMSMapView. It may not be initialized directly, and + * subclasses must implement the tileForX:y:zoom: method to return tiles. + * + * At zoom level 0 the whole world is a square covered by a single tile, + * and the coordinates |x| and |y| are both 0 for that tile. At zoom level 1, + * the world is covered by 4 tiles with |x| and |y| being 0 or 1, and so on. + */ +@interface GMSTileLayer : NSObject + +/** + * requestTileForX:y:zoom:receiver: generates image tiles for GMSTileOverlay. + * It must be overridden by subclasses. The tile for the given |x|, |y| and + * |zoom| _must_ be later passed to |receiver|. + * + * Specify kGMSTileLayerNoTile if no tile is available for this location; or + * nil if a transient error occured and a tile may be available later. + * + * Calls to this method will be made on the main thread. See GMSSyncTileLayer + * for a base class that implements a blocking tile layer that does not run on + * your application's main thread. + */ +- (void)requestTileForX:(NSUInteger)x + y:(NSUInteger)y + zoom:(NSUInteger)zoom + receiver:(id)receiver; + +/** + * Clears the cache so that all tiles will be requested again. + */ +- (void)clearTileCache; + +/** + * The map this GMSTileOverlay is displayed on. Setting this property will add + * the layer to the map. Setting it to nil removes this layer from the map. A + * layer may be active on at most one map at any given time. + */ +@property(nonatomic, weak) GMSMapView *GMS_NULLABLE_PTR map; + +/** + * Higher |zIndex| value tile layers will be drawn on top of lower |zIndex| + * value tile layers and overlays. Equal values result in undefined draw + * ordering. + */ +@property(nonatomic, assign) int zIndex; + +/** + * Specifies the number of pixels (not points) that the returned tile images + * will prefer to display as. For best results, this should be the edge + * length of your custom tiles. Defaults to 256, which is the traditional + * size of Google Maps tiles. + * + * Values less than the equivalent of 128 points (e.g. 256 pixels on retina + * devices) may not perform well and are not recommended. + * + * As an example, an application developer may wish to provide retina tiles + * (512 pixel edge length) on retina devices, to keep the same number of tiles + * per view as the default value of 256 would give on a non-retina device. + */ +@property(nonatomic, assign) NSInteger tileSize; + +/** + * Specifies the opacity of the tile layer. This provides a multiplier for + * the alpha channel of tile images. + */ +@property(nonatomic, assign) float opacity; + +/** + * Specifies whether the tiles should fade in. Default YES. + */ +@property(nonatomic, assign) BOOL fadeIn; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSUISettings.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSUISettings.h new file mode 100755 index 0000000..40b1f78 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSUISettings.h @@ -0,0 +1,94 @@ +// +// GMSUISettings.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +/** Settings for the user interface of a GMSMapView. */ +@interface GMSUISettings : NSObject + +/** + * Sets the preference for whether all gestures should be enabled (default) or + * disabled. This doesn't restrict users from tapping any on screen buttons to + * move the camera (e.g., compass or zoom controls), nor does it restrict + * programmatic movements and animation. + */ +- (void)setAllGesturesEnabled:(BOOL)enabled; + +/** + * Controls whether scroll gestures are enabled (default) or disabled. If + * enabled, users may drag to pan the camera. This does not limit programmatic + * movement of the camera. + */ +@property(nonatomic, assign) BOOL scrollGestures; + +/** + * Controls whether zoom gestures are enabled (default) or disabled. If + * enabled, users may double tap/two-finger tap or pinch to zoom the camera. + * This does not limit programmatic movement of the camera. + */ +@property(nonatomic, assign) BOOL zoomGestures; + +/** + * Controls whether tilt gestures are enabled (default) or disabled. If enabled, + * users may use a two-finger vertical down or up swipe to tilt the camera. This + * does not limit programmatic control of the camera's viewingAngle. + */ +@property(nonatomic, assign) BOOL tiltGestures; + +/** + * Controls whether rotate gestures are enabled (default) or disabled. If + * enabled, users may use a two-finger rotate gesture to rotate the camera. This + * does not limit programmatic control of the camera's bearing. + */ +@property(nonatomic, assign) BOOL rotateGestures; + +/** + * Controls whether gestures by users are completely consumed by the GMSMapView + * when gestures are enabled (default YES). This prevents these gestures from + * being received by parent views. + * + * When the GMSMapView is contained by a UIScrollView (or other scrollable area), + * this means that gestures on the map will not be additional consumed as scroll + * gestures. However, disabling this (set to NO) may be useful to support + * complex view hierarchies or requirements. + */ +@property(nonatomic, assign) BOOL consumesGesturesInView; + +/** + * Enables or disables the compass. The compass is an icon on the map that + * indicates the direction of north on the map. + * + * If enabled, it is only shown when the camera is rotated away from its default + * orientation (bearing of 0). When a user taps the compass, the camera orients + * itself to its default orientation and fades away shortly after. If disabled, + * the compass will never be displayed. + */ +@property(nonatomic, assign) BOOL compassButton; + +/** + * Enables or disables the My Location button. This is a button visible on the + * map that, when tapped by users, will center the map on the current user + * location. + */ +@property(nonatomic, assign) BOOL myLocationButton; + +/** + * Enables (default) or disables the indoor floor picker. If enabled, it is only + * visible when the view is focused on a building with indoor floor data. + * If disabled, the selected floor can still be controlled programmatically via + * the indoorDisplay mapView property. + */ +@property(nonatomic, assign) BOOL indoorPicker; + +/** + * Controls whether rotate and zoom gestures can be performed off-center and scrolled around + * (default YES). + */ +@property(nonatomic, assign) BOOL allowScrollGesturesDuringRotateOrZoom; + +@end diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSURLTileLayer.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSURLTileLayer.h new file mode 100755 index 0000000..058bba8 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GMSURLTileLayer.h @@ -0,0 +1,61 @@ +// +// GMSURLTileLayer.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if __has_feature(modules) +@import GoogleMapsBase; +#else +#import +#endif + +@class NSURL; + +GMS_ASSUME_NONNULL_BEGIN + +/** + * |GMSTileURLConstructor| is a block taking |x|, |y| and |zoom| + * and returning an NSURL, or nil to indicate no tile for that location. + */ +typedef NSURL *GMS_NULLABLE_PTR (^GMSTileURLConstructor)(NSUInteger x, NSUInteger y, + NSUInteger zoom); + +/** + * GMSURLTileProvider fetches tiles based on the URLs returned from a + * GMSTileURLConstructor. For example: + *
+ *   GMSTileURLConstructor constructor = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) {
+ *     NSString *URLStr =
+ *         [NSString stringWithFormat:@"https://example.com/%d/%d/%d.png", x, y, zoom];
+ *     return [NSURL URLWithString:URLStr];
+ *   };
+ *   GMSTileLayer *layer =
+ *       [GMSURLTileLayer tileLayerWithURLConstructor:constructor];
+ *   layer.userAgent = @"SDK user agent";
+ *   layer.map = map;
+ * 
+ * + * GMSURLTileProvider may not be subclassed and should only be created via its + * convenience constructor. + */ +@interface GMSURLTileLayer : GMSTileLayer + +/** Convenience constructor. |constructor| must be non-nil. */ ++ (instancetype)tileLayerWithURLConstructor:(GMSTileURLConstructor)constructor; + +/** + * Specify the user agent to describe your application. If this is nil (the + * default), the default iOS user agent is used for HTTP requests. + */ +@property(nonatomic, copy) NSString *GMS_NULLABLE_PTR userAgent; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GoogleMaps.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GoogleMaps.h new file mode 100755 index 0000000..165ac99 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Headers/GoogleMaps.h @@ -0,0 +1,50 @@ +// +// GoogleMaps.h +// Google Maps SDK for iOS +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Modules/module.modulemap b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Modules/module.modulemap new file mode 100755 index 0000000..5763714 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,40 @@ +framework module GoogleMaps { umbrella header "GoogleMaps.h" +header "GMSAddress.h" +header "GMSCALayer.h" +header "GMSCameraPosition.h" +header "GMSCameraUpdate.h" +header "GMSCircle.h" +header "GMSCoordinateBounds+GoogleMaps.h" +header "GMSDeprecationMacros.h" +header "GMSGeocoder.h" +header "GMSGeometryUtils.h" +header "GMSGroundOverlay.h" +header "GMSIndoorBuilding.h" +header "GMSIndoorDisplay.h" +header "GMSIndoorLevel.h" +header "GMSMapLayer.h" +header "GMSMapStyle.h" +header "GMSMapView+Animation.h" +header "GMSMapView.h" +header "GMSMarker.h" +header "GMSMarkerLayer.h" +header "GMSMutablePath.h" +header "GMSOrientation.h" +header "GMSOverlay.h" +header "GMSPanorama.h" +header "GMSPanoramaCamera.h" +header "GMSPanoramaCameraUpdate.h" +header "GMSPanoramaLayer.h" +header "GMSPanoramaLink.h" +header "GMSPanoramaService.h" +header "GMSPanoramaView.h" +header "GMSPath.h" +header "GMSPolygon.h" +header "GMSPolyline.h" +header "GMSProjection.h" +header "GMSServices.h" +header "GMSSyncTileLayer.h" +header "GMSTileLayer.h" +header "GMSUISettings.h" +header "GMSURLTileLayer.h" +export * module * { export * } } diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.mom b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.mom new file mode 100755 index 0000000..89db31a Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.mom differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.omo b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.omo new file mode 100755 index 0000000..6455250 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/Storage.omo differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/VersionInfo.plist b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/VersionInfo.plist new file mode 100755 index 0000000..47b2dcd Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCacheStorage.momd/VersionInfo.plist differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/DroidSansMerged-Regular.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/DroidSansMerged-Regular.ttf new file mode 100755 index 0000000..2aca5f5 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/DroidSansMerged-Regular.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-1x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-1x.png new file mode 100755 index 0000000..b68a9f0 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-1x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-2x.png new file mode 100755 index 0000000..3d077df Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-3x.png new file mode 100755 index 0000000..5180530 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavNightModeSprites-0-3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-1x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-1x.png new file mode 100755 index 0000000..447bcea Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-1x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-2x.png new file mode 100755 index 0000000..a4cd614 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-3x.png new file mode 100755 index 0000000..db6a3e1 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSNavSprites-0-3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-1x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-1x.png new file mode 100755 index 0000000..9f0d53a Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-1x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-2x.png new file mode 100755 index 0000000..0d23cee Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-3x.png new file mode 100755 index 0000000..00f2c57 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/GMSSprites-0-3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Info.plist b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Info.plist new file mode 100755 index 0000000..6805603 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Info.plist differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Black.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Black.ttf new file mode 100755 index 0000000..cb905bc Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Black.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-BlackItalic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-BlackItalic.ttf new file mode 100755 index 0000000..3ebdc7d Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-BlackItalic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Bold.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Bold.ttf new file mode 100755 index 0000000..68822ca Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Bold.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-BoldItalic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-BoldItalic.ttf new file mode 100755 index 0000000..aebf8eb Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-BoldItalic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Italic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Italic.ttf new file mode 100755 index 0000000..2041cbc Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Italic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Light.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Light.ttf new file mode 100755 index 0000000..aa45340 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Light.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-LightItalic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-LightItalic.ttf new file mode 100755 index 0000000..a85444f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-LightItalic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Medium.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Medium.ttf new file mode 100755 index 0000000..a3c1a1f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Medium.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-MediumItalic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-MediumItalic.ttf new file mode 100755 index 0000000..b828205 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-MediumItalic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Regular.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Regular.ttf new file mode 100755 index 0000000..0e58508 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Regular.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Thin.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Thin.ttf new file mode 100755 index 0000000..8779333 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-Thin.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-ThinItalic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-ThinItalic.ttf new file mode 100755 index 0000000..b79cb26 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Roboto-ThinItalic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/RobotoCondensed-Italic.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/RobotoCondensed-Italic.ttf new file mode 100755 index 0000000..d2b611f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/RobotoCondensed-Italic.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/RobotoCondensed-Regular.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/RobotoCondensed-Regular.ttf new file mode 100755 index 0000000..b9fc49c Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/RobotoCondensed-Regular.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Siemreap.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Siemreap.ttf new file mode 100755 index 0000000..a2c8dff Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Siemreap.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Tharlon-Regular.ttf b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Tharlon-Regular.ttf new file mode 100755 index 0000000..4717d70 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/Tharlon-Regular.ttf differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ar.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ar.lproj/GMSCore.strings new file mode 100755 index 0000000..63f9da1 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ar.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background.png new file mode 100755 index 0000000..cec89b6 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@2x.png new file mode 100755 index 0000000..7a3d29d Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@3x.png new file mode 100755 index 0000000..74eace5 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_background@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass.png new file mode 100755 index 0000000..11fee99 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass@2x.png new file mode 100755 index 0000000..a73d1d6 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night.png new file mode 100755 index 0000000..df8c234 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night@2x.png new file mode 100755 index 0000000..dccbf03 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_compass_night@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location.png new file mode 100755 index 0000000..c09a65f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location@2x.png new file mode 100755 index 0000000..379be62 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/button_my_location@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ca.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ca.lproj/GMSCore.strings new file mode 100755 index 0000000..5ba1693 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ca.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/cs.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/cs.lproj/GMSCore.strings new file mode 100755 index 0000000..2184066 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/cs.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/da.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/da.lproj/GMSCore.strings new file mode 100755 index 0000000..7277ae9 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/da.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/dav_one_way_16_256.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/dav_one_way_16_256.png new file mode 100755 index 0000000..7f7c2fe Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/dav_one_way_16_256.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/de.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/de.lproj/GMSCore.strings new file mode 100755 index 0000000..bc87d22 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/de.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/el.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/el.lproj/GMSCore.strings new file mode 100755 index 0000000..7160259 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/el.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en.lproj/GMSCore.strings new file mode 100755 index 0000000..4dd8f57 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_AU.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_AU.lproj/GMSCore.strings new file mode 100755 index 0000000..68669f3 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_AU.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_GB.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_GB.lproj/GMSCore.strings new file mode 100755 index 0000000..68669f3 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_GB.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_IN.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_IN.lproj/GMSCore.strings new file mode 100755 index 0000000..68669f3 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/en_IN.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es.lproj/GMSCore.strings new file mode 100755 index 0000000..9180f8f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_419.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_419.lproj/GMSCore.strings new file mode 100755 index 0000000..584359b Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_419.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_MX.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_MX.lproj/GMSCore.strings new file mode 100755 index 0000000..584359b Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/es_MX.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fi.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fi.lproj/GMSCore.strings new file mode 100755 index 0000000..92f4ff2 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fi.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr.lproj/GMSCore.strings new file mode 100755 index 0000000..473a74c Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr_CA.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr_CA.lproj/GMSCore.strings new file mode 100755 index 0000000..6f93103 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/fr_CA.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt.png new file mode 100755 index 0000000..c8eb786 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt@2x.png new file mode 100755 index 0000000..2eddacd Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt@3x.png new file mode 100755 index 0000000..d971d34 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_56x20_with_2_stroke_color_60x22pt@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt.png new file mode 100755 index 0000000..1a2341e Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt@2x.png new file mode 100755 index 0000000..9641b49 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt@3x.png new file mode 100755 index 0000000..5a188c9 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/googlelogo_light_56x20_with_2_stroke_color_60x22pt@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/he.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/he.lproj/GMSCore.strings new file mode 100755 index 0000000..d184291 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/he.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hi.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hi.lproj/GMSCore.strings new file mode 100755 index 0000000..97aeec3 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hi.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hr.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hr.lproj/GMSCore.strings new file mode 100755 index 0000000..f90d35f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hr.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hu.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hu.lproj/GMSCore.strings new file mode 100755 index 0000000..a1fbcb2 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/hu.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle.png new file mode 100755 index 0000000..db933c8 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle@2x.png new file mode 100755 index 0000000..65fee67 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_compass_needle@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation.png new file mode 100755 index 0000000..dccdcfd Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@2x.png new file mode 100755 index 0000000..ccb840e Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@3x.png new file mode 100755 index 0000000..0300f62 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ic_qu_direction_mylocation@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/id.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/id.lproj/GMSCore.strings new file mode 100755 index 0000000..ab3ed0c Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/id.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/it.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/it.lproj/GMSCore.strings new file mode 100755 index 0000000..2180dd0 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/it.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ja.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ja.lproj/GMSCore.strings new file mode 100755 index 0000000..ddaaf93 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ja.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ko.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ko.lproj/GMSCore.strings new file mode 100755 index 0000000..4053b92 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ko.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ms.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ms.lproj/GMSCore.strings new file mode 100755 index 0000000..4420d6f Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ms.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nb.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nb.lproj/GMSCore.strings new file mode 100755 index 0000000..f47fd08 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nb.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nl.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nl.lproj/GMSCore.strings new file mode 100755 index 0000000..fb2610b Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/nl.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pl.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pl.lproj/GMSCore.strings new file mode 100755 index 0000000..ef54f7d Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pl.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture.png new file mode 100755 index 0000000..4e42166 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture_dim.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture_dim.png new file mode 100755 index 0000000..576dc88 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/polyline_colors_texture_dim.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt.lproj/GMSCore.strings new file mode 100755 index 0000000..f75de18 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_BR.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_BR.lproj/GMSCore.strings new file mode 100755 index 0000000..f75de18 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_BR.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_PT.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_PT.lproj/GMSCore.strings new file mode 100755 index 0000000..5448d50 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/pt_PT.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ro.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ro.lproj/GMSCore.strings new file mode 100755 index 0000000..d26a3e7 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ro.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_1-1.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_1-1.png new file mode 100755 index 0000000..46b0843 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_1-1.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_128-32.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_128-32.png new file mode 100755 index 0000000..08672e6 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_128-32.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_16-4.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_16-4.png new file mode 100755 index 0000000..ba0b0a5 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_16-4.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_2-1.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_2-1.png new file mode 100755 index 0000000..df77f65 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_2-1.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_256-64.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_256-64.png new file mode 100755 index 0000000..45a66a4 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_256-64.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_32-8.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_32-8.png new file mode 100755 index 0000000..ed0424b Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_32-8.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_4-1.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_4-1.png new file mode 100755 index 0000000..b2efb5d Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_4-1.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_64-16.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_64-16.png new file mode 100755 index 0000000..664e9f6 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_64-16.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_8-2.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_8-2.png new file mode 100755 index 0000000..dabc352 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/road_8-2.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ru.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ru.lproj/GMSCore.strings new file mode 100755 index 0000000..0d98dd6 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/ru.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sk.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sk.lproj/GMSCore.strings new file mode 100755 index 0000000..bc8a409 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sk.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sv.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sv.lproj/GMSCore.strings new file mode 100755 index 0000000..61b5e68 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/sv.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/th.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/th.lproj/GMSCore.strings new file mode 100755 index 0000000..92d6492 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/th.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/tr.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/tr.lproj/GMSCore.strings new file mode 100755 index 0000000..54f1ba6 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/tr.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/uk.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/uk.lproj/GMSCore.strings new file mode 100755 index 0000000..ea455a2 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/uk.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/vi.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/vi.lproj/GMSCore.strings new file mode 100755 index 0000000..6246d75 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/vi.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_CN.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_CN.lproj/GMSCore.strings new file mode 100755 index 0000000..ebd3314 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_CN.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_HK.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_HK.lproj/GMSCore.strings new file mode 100755 index 0000000..a67bb9e Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_HK.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_TW.lproj/GMSCore.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_TW.lproj/GMSCore.strings new file mode 100755 index 0000000..d5a0a5a Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/GMSCoreResources.bundle/zh_TW.lproj/GMSCore.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/Info.plist b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/Info.plist new file mode 100755 index 0000000..7d44b90 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/Info.plist differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left.png new file mode 100755 index 0000000..c8e4a41 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left@2x.png new file mode 100755 index 0000000..3e8fdca Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left@3x.png new file mode 100755 index 0000000..1d8aee7 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_left@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right.png new file mode 100755 index 0000000..6189714 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right@2x.png new file mode 100755 index 0000000..8abc3f7 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right@3x.png new file mode 100755 index 0000000..7c35f06 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/bubble_right@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker.png new file mode 100755 index 0000000..ad62a2b Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker@2x.png new file mode 100755 index 0000000..50fa00b Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker@2x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker@3x.png new file mode 100755 index 0000000..a368b46 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/default_marker@3x.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/en.lproj/InfoPlist.strings b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/en.lproj/InfoPlist.strings new file mode 100755 index 0000000..3967e06 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/en.lproj/InfoPlist.strings differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/oss_licenses_maps.txt.gz b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/oss_licenses_maps.txt.gz new file mode 100755 index 0000000..1331f9a Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle/oss_licenses_maps.txt.gz differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/Current b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMaps.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/GoogleMapsBase b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/GoogleMapsBase new file mode 120000 index 0000000..11c8237 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/GoogleMapsBase @@ -0,0 +1 @@ +Versions/Current/GoogleMapsBase \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Headers b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Modules b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Modules new file mode 120000 index 0000000..5736f31 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/GoogleMapsBase b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/GoogleMapsBase new file mode 100755 index 0000000..3667a59 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/GoogleMapsBase differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GMSCompatabilityMacros.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GMSCompatabilityMacros.h new file mode 100755 index 0000000..2deea17 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GMSCompatabilityMacros.h @@ -0,0 +1,43 @@ +// +// GMSCompatabilityMacros.h +// Google Maps SDK for iOS +// +// Copyright 2015 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#if !__has_feature(nullability) || !defined(NS_ASSUME_NONNULL_BEGIN) || \ + !defined(NS_ASSUME_NONNULL_END) +#define GMS_ASSUME_NONNULL_BEGIN +#define GMS_ASSUME_NONNULL_END +#define GMS_NULLABLE +#define GMS_NULLABLE_PTR +#define GMS_NULLABLE_INSTANCETYPE instancetype +#else +#define GMS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN +#define GMS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END +#define GMS_NULLABLE nullable +#define GMS_NULLABLE_PTR __nullable +#define GMS_NULLABLE_INSTANCETYPE nullable instancetype +#endif + +#if __has_feature(objc_generics) && defined(__IPHONE_9_0) && \ + __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 +#define GMS_DECLARE_GENERICS 1 +#else +#define GMS_DECLARE_GENERICS 0 +#endif + +#if GMS_DECLARE_GENERICS +#define GMS_NSArrayOf(value) NSArray +#define GMS_NSDictionaryOf(key, value) NSDictionary +#define GMS_NSSetOf(value) NSSet +#else +#define GMS_NSArrayOf(value) NSArray +#define GMS_NSDictionaryOf(key, value) NSDictionary +#define GMS_NSSetOf(value) NSSet +#endif diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GMSCoordinateBounds.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GMSCoordinateBounds.h new file mode 100755 index 0000000..4db7511 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GMSCoordinateBounds.h @@ -0,0 +1,82 @@ +// +// GMSCoordinateBounds.h +// Google Maps SDK for iOS +// +// Copyright 2013 Google Inc. +// +// Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of +// Service: https://developers.google.com/maps/terms +// + +#import + +#import + +GMS_ASSUME_NONNULL_BEGIN + +/** + * GMSCoordinateBounds represents a rectangular bounding box on the Earth's + * surface. GMSCoordinateBounds is immutable and can't be modified after + * construction. + */ +@interface GMSCoordinateBounds : NSObject + +/** The North-East corner of these bounds. */ +@property(nonatomic, readonly) CLLocationCoordinate2D northEast; + +/** The South-West corner of these bounds. */ +@property(nonatomic, readonly) CLLocationCoordinate2D southWest; + +/** + * Returns NO if this bounds does not contain any points. + * For example, [[GMSCoordinateBounds alloc] init].valid == NO. + * When an invalid bounds is expanded with valid coordinates via + * includingCoordinate: or includingBounds:, the resulting bounds will be valid + * but contain only the new coordinates. + */ +@property(readonly, getter=isValid) BOOL valid; + +/** + * Inits the northEast and southWest bounds corresponding + * to the rectangular region defined by the two corners. + * + * It is ambiguous whether the longitude of the box + * extends from |coord1| to |coord2| or vice-versa; + * the box is constructed as the smaller of the two variants, eliminating the + * ambiguity. + */ +- (id)initWithCoordinate:(CLLocationCoordinate2D)coord1 + coordinate:(CLLocationCoordinate2D)coord2; + +/** + * Returns a GMSCoordinateBounds representing + * the current bounds extended to include the passed-in coordinate. + * If the current bounds is invalid, the result is a valid bounds containing + * only |coordinate|. + */ +- (GMSCoordinateBounds *)includingCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns a GMSCoordinateBounds representing + * the current bounds extended to include the entire other bounds. + * If the current bounds is invalid, the result is a valid bounds equal + * to |other|. + */ +- (GMSCoordinateBounds *)includingBounds:(GMSCoordinateBounds *)other; + +/** + * Returns YES if |coordinate| is contained within this bounds. This includes + * points that lie exactly on the edge of the bounds. + */ +- (BOOL)containsCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + * Returns YES if |other| overlaps with this bounds. + * Two bounds are overlapping if there is at least one coordinate point + * contained by both. + */ +- (BOOL)intersectsBounds:(GMSCoordinateBounds *)other; + +@end + +GMS_ASSUME_NONNULL_END diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GoogleMapsBase.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GoogleMapsBase.h new file mode 100755 index 0000000..9183bb1 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Headers/GoogleMapsBase.h @@ -0,0 +1,2 @@ +#import +#import diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Modules/module.modulemap b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Modules/module.modulemap new file mode 100755 index 0000000..360c546 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,4 @@ +framework module GoogleMapsBase { umbrella header "GoogleMapsBase.h" +header "GMSCompatabilityMacros.h" +header "GMSCoordinateBounds.h" +export * module * { export * } } diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/Current b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsBase.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/GoogleMapsCore b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/GoogleMapsCore new file mode 120000 index 0000000..2761192 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/GoogleMapsCore @@ -0,0 +1 @@ +Versions/Current/GoogleMapsCore \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Headers b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Modules b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Modules new file mode 120000 index 0000000..5736f31 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/GoogleMapsCore b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/GoogleMapsCore new file mode 100755 index 0000000..0496494 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/GoogleMapsCore differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/Headers/GoogleMapsCore.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/Headers/GoogleMapsCore.h new file mode 100755 index 0000000..e69de29 diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/Modules/module.modulemap b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/Modules/module.modulemap new file mode 100755 index 0000000..ef88a0e --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,2 @@ +framework module GoogleMapsCore { umbrella header "GoogleMapsCore.h" +export * module * { export * } } diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/Current b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Dependencies/GoogleMapsCore.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/LICENSE b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/LICENSE new file mode 100644 index 0000000..fa610a8 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2015, +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* 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. + +* Neither the name of PXGoogleDirections nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +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. + diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.podspec b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.podspec new file mode 100644 index 0000000..db55ede --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.podspec @@ -0,0 +1,26 @@ +Pod::Spec.new do |s| + s.name = 'PXGoogleDirections' + s.version = '1.3' + + s.homepage = "https://github.com/poulpix/PXGoogleDirections" + s.summary = 'Google Directions API SDK for iOS, entirely written in Swift' + s.screenshots = [ 'https://raw.githubusercontent.com/poulpix/PXGoogleDirections/master/Sample/SampleScreen1.png', 'https://raw.githubusercontent.com/poulpix/PXGoogleDirections/master/Sample/SampleScreen2.png' ] + + s.author = { 'Romain L' => 'dev.romain@me.com' } + s.license = { :type => 'BSD', :file => 'LICENSE' } + s.social_media_url = "https://twitter.com/_RomainL" + + s.platforms = { :ios => '8.1' } + s.ios.deployment_target = '8.1' + + s.source_files = 'PXGoogleDirections/*.{h,swift}' + s.module_name = 'PXGoogleDirections' + s.source = { :git => "https://github.com/poulpix/PXGoogleDirections.git", :tag => "1.3" } + s.requires_arc = true + s.libraries = "c++", "icucore", "z" + s.frameworks = "Accelerate", "AVFoundation", "CoreBluetooth", "CoreData", "CoreLocation", "CoreText", "Foundation", "GLKit", "ImageIO", "OpenGLES", "QuartzCore", "Security", "SystemConfiguration", "CoreGraphics", "GoogleMapsCore", "GoogleMapsBase", "GoogleMaps" + #s.dependency 'GoogleMaps', '~> 2.0' + s.resource = 'Dependencies/GoogleMaps.framework/Versions/A/Resources/GoogleMaps.bundle' + s.vendored_frameworks = "Dependencies/GoogleMaps.framework", "Dependencies/GoogleMapsBase.framework", "Dependencies/GoogleMapsCore.framework" + s.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(PODS_ROOT)/PXGoogleDirections/Dependencies' } +end diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcodeproj/project.pbxproj b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcodeproj/project.pbxproj new file mode 100644 index 0000000..10ba175 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcodeproj/project.pbxproj @@ -0,0 +1,439 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7A083DDB1D2D71D900B42940 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A083DDA1D2D71D900B42940 /* UIKit.framework */; }; + 7A083DEE1D2D723F00B42940 /* PXGoogleDirections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DDC1D2D723F00B42940 /* PXGoogleDirections.swift */; }; + 7A083DEF1D2D723F00B42940 /* PXGoogleDirectionsDistance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DDD1D2D723F00B42940 /* PXGoogleDirectionsDistance.swift */; }; + 7A083DF01D2D723F00B42940 /* PXGoogleDirectionsDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DDE1D2D723F00B42940 /* PXGoogleDirectionsDuration.swift */; }; + 7A083DF11D2D723F00B42940 /* PXGoogleDirectionsEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DDF1D2D723F00B42940 /* PXGoogleDirectionsEnums.swift */; }; + 7A083DF21D2D723F00B42940 /* PXGoogleDirectionsResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE01D2D723F00B42940 /* PXGoogleDirectionsResponse.swift */; }; + 7A083DF31D2D723F00B42940 /* PXGoogleDirectionsRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE11D2D723F00B42940 /* PXGoogleDirectionsRoute.swift */; }; + 7A083DF41D2D723F00B42940 /* PXGoogleDirectionsRouteFare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE21D2D723F00B42940 /* PXGoogleDirectionsRouteFare.swift */; }; + 7A083DF51D2D723F00B42940 /* PXGoogleDirectionsRouteLeg.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE31D2D723F00B42940 /* PXGoogleDirectionsRouteLeg.swift */; }; + 7A083DF61D2D723F00B42940 /* PXGoogleDirectionsRouteLegStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE41D2D723F00B42940 /* PXGoogleDirectionsRouteLegStep.swift */; }; + 7A083DF71D2D723F00B42940 /* PXGoogleDirectionsRouteLegStepTransitDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE51D2D723F00B42940 /* PXGoogleDirectionsRouteLegStepTransitDetails.swift */; }; + 7A083DF81D2D723F00B42940 /* PXGoogleDirectionsStop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE61D2D723F00B42940 /* PXGoogleDirectionsStop.swift */; }; + 7A083DF91D2D723F00B42940 /* PXGoogleDirectionsTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE71D2D723F00B42940 /* PXGoogleDirectionsTime.swift */; }; + 7A083DFA1D2D723F00B42940 /* PXGoogleDirectionsTransitAgency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE81D2D723F00B42940 /* PXGoogleDirectionsTransitAgency.swift */; }; + 7A083DFB1D2D723F00B42940 /* PXGoogleDirectionsTransitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DE91D2D723F00B42940 /* PXGoogleDirectionsTransitLine.swift */; }; + 7A083DFC1D2D723F00B42940 /* PXGoogleDirectionsTransitLineVehicle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DEA1D2D723F00B42940 /* PXGoogleDirectionsTransitLineVehicle.swift */; }; + 7A083DFD1D2D723F00B42940 /* PXLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DEB1D2D723F00B42940 /* PXLocation.swift */; }; + 7A083DFE1D2D723F00B42940 /* PXTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DEC1D2D723F00B42940 /* PXTime.swift */; }; + 7A083DFF1D2D723F00B42940 /* PXUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A083DED1D2D723F00B42940 /* PXUtils.swift */; }; + 7A0985511D2D71120095737F /* PXGoogleDirections.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A0985501D2D71120095737F /* PXGoogleDirections.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DCAADA0A9AB8FDB51F35531 /* Pods_PXGoogleDirections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8100287785EB5930FC9677CE /* Pods_PXGoogleDirections.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 40B3DE48E5D50B63C81FCFF7 /* Pods-PXGoogleDirections.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PXGoogleDirections.release.xcconfig"; path = "Pods/Target Support Files/Pods-PXGoogleDirections/Pods-PXGoogleDirections.release.xcconfig"; sourceTree = ""; }; + 7A083DD81D2D718F00B42940 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + 7A083DDA1D2D71D900B42940 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 7A083DDC1D2D723F00B42940 /* PXGoogleDirections.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirections.swift; sourceTree = ""; }; + 7A083DDD1D2D723F00B42940 /* PXGoogleDirectionsDistance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsDistance.swift; sourceTree = ""; }; + 7A083DDE1D2D723F00B42940 /* PXGoogleDirectionsDuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsDuration.swift; sourceTree = ""; }; + 7A083DDF1D2D723F00B42940 /* PXGoogleDirectionsEnums.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsEnums.swift; sourceTree = ""; }; + 7A083DE01D2D723F00B42940 /* PXGoogleDirectionsResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsResponse.swift; sourceTree = ""; }; + 7A083DE11D2D723F00B42940 /* PXGoogleDirectionsRoute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsRoute.swift; sourceTree = ""; }; + 7A083DE21D2D723F00B42940 /* PXGoogleDirectionsRouteFare.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsRouteFare.swift; sourceTree = ""; }; + 7A083DE31D2D723F00B42940 /* PXGoogleDirectionsRouteLeg.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsRouteLeg.swift; sourceTree = ""; }; + 7A083DE41D2D723F00B42940 /* PXGoogleDirectionsRouteLegStep.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsRouteLegStep.swift; sourceTree = ""; }; + 7A083DE51D2D723F00B42940 /* PXGoogleDirectionsRouteLegStepTransitDetails.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsRouteLegStepTransitDetails.swift; sourceTree = ""; }; + 7A083DE61D2D723F00B42940 /* PXGoogleDirectionsStop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsStop.swift; sourceTree = ""; }; + 7A083DE71D2D723F00B42940 /* PXGoogleDirectionsTime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsTime.swift; sourceTree = ""; }; + 7A083DE81D2D723F00B42940 /* PXGoogleDirectionsTransitAgency.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsTransitAgency.swift; sourceTree = ""; }; + 7A083DE91D2D723F00B42940 /* PXGoogleDirectionsTransitLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsTransitLine.swift; sourceTree = ""; }; + 7A083DEA1D2D723F00B42940 /* PXGoogleDirectionsTransitLineVehicle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXGoogleDirectionsTransitLineVehicle.swift; sourceTree = ""; }; + 7A083DEB1D2D723F00B42940 /* PXLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXLocation.swift; sourceTree = ""; }; + 7A083DEC1D2D723F00B42940 /* PXTime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXTime.swift; sourceTree = ""; }; + 7A083DED1D2D723F00B42940 /* PXUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PXUtils.swift; sourceTree = ""; }; + 7A09854D1D2D71120095737F /* PXGoogleDirections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PXGoogleDirections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A0985501D2D71120095737F /* PXGoogleDirections.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PXGoogleDirections.h; sourceTree = ""; }; + 7A0985521D2D71120095737F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8100287785EB5930FC9677CE /* Pods_PXGoogleDirections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PXGoogleDirections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 95ACA0ABED8E80D370DA7D3C /* Pods-PXGoogleDirections.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PXGoogleDirections.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PXGoogleDirections/Pods-PXGoogleDirections.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7A0985491D2D71120095737F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A083DDB1D2D71D900B42940 /* UIKit.framework in Frameworks */, + 7DCAADA0A9AB8FDB51F35531 /* Pods_PXGoogleDirections.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7A0985431D2D71120095737F = { + isa = PBXGroup; + children = ( + 7A09854F1D2D71120095737F /* PXGoogleDirections */, + 7A09854E1D2D71120095737F /* Products */, + E316165D1ADC808BF5FC80B2 /* Pods */, + A4DEFDEF788BFD1D098ABAF1 /* Frameworks */, + ); + sourceTree = ""; + }; + 7A09854E1D2D71120095737F /* Products */ = { + isa = PBXGroup; + children = ( + 7A09854D1D2D71120095737F /* PXGoogleDirections.framework */, + ); + name = Products; + sourceTree = ""; + }; + 7A09854F1D2D71120095737F /* PXGoogleDirections */ = { + isa = PBXGroup; + children = ( + 7A083DDC1D2D723F00B42940 /* PXGoogleDirections.swift */, + 7A083DDD1D2D723F00B42940 /* PXGoogleDirectionsDistance.swift */, + 7A083DDE1D2D723F00B42940 /* PXGoogleDirectionsDuration.swift */, + 7A083DDF1D2D723F00B42940 /* PXGoogleDirectionsEnums.swift */, + 7A083DE01D2D723F00B42940 /* PXGoogleDirectionsResponse.swift */, + 7A083DE11D2D723F00B42940 /* PXGoogleDirectionsRoute.swift */, + 7A083DE21D2D723F00B42940 /* PXGoogleDirectionsRouteFare.swift */, + 7A083DE31D2D723F00B42940 /* PXGoogleDirectionsRouteLeg.swift */, + 7A083DE41D2D723F00B42940 /* PXGoogleDirectionsRouteLegStep.swift */, + 7A083DE51D2D723F00B42940 /* PXGoogleDirectionsRouteLegStepTransitDetails.swift */, + 7A083DE61D2D723F00B42940 /* PXGoogleDirectionsStop.swift */, + 7A083DE71D2D723F00B42940 /* PXGoogleDirectionsTime.swift */, + 7A083DE81D2D723F00B42940 /* PXGoogleDirectionsTransitAgency.swift */, + 7A083DE91D2D723F00B42940 /* PXGoogleDirectionsTransitLine.swift */, + 7A083DEA1D2D723F00B42940 /* PXGoogleDirectionsTransitLineVehicle.swift */, + 7A083DEB1D2D723F00B42940 /* PXLocation.swift */, + 7A083DEC1D2D723F00B42940 /* PXTime.swift */, + 7A083DED1D2D723F00B42940 /* PXUtils.swift */, + 7A0985501D2D71120095737F /* PXGoogleDirections.h */, + 7A0985521D2D71120095737F /* Info.plist */, + ); + path = PXGoogleDirections; + sourceTree = ""; + }; + A4DEFDEF788BFD1D098ABAF1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7A083DDA1D2D71D900B42940 /* UIKit.framework */, + 7A083DD81D2D718F00B42940 /* CoreText.framework */, + 8100287785EB5930FC9677CE /* Pods_PXGoogleDirections.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E316165D1ADC808BF5FC80B2 /* Pods */ = { + isa = PBXGroup; + children = ( + 95ACA0ABED8E80D370DA7D3C /* Pods-PXGoogleDirections.debug.xcconfig */, + 40B3DE48E5D50B63C81FCFF7 /* Pods-PXGoogleDirections.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 7A09854A1D2D71120095737F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A0985511D2D71120095737F /* PXGoogleDirections.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 7A09854C1D2D71120095737F /* PXGoogleDirections */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7A0985551D2D71120095737F /* Build configuration list for PBXNativeTarget "PXGoogleDirections" */; + buildPhases = ( + 906178DEA22C8602123CE3A5 /* [CP] Check Pods Manifest.lock */, + 7A0985481D2D71120095737F /* Sources */, + 7A0985491D2D71120095737F /* Frameworks */, + 7A09854A1D2D71120095737F /* Headers */, + 7A09854B1D2D71120095737F /* Resources */, + F662D553D8181D0747B983F6 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PXGoogleDirections; + productName = PXGoogleDirections; + productReference = 7A09854D1D2D71120095737F /* PXGoogleDirections.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7A0985441D2D71120095737F /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0810; + ORGANIZATIONNAME = RLT; + TargetAttributes = { + 7A09854C1D2D71120095737F = { + CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = H4ZDL2CC7Y; + LastSwiftMigration = 0810; + }; + }; + }; + buildConfigurationList = 7A0985471D2D71120095737F /* Build configuration list for PBXProject "PXGoogleDirections" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7A0985431D2D71120095737F; + productRefGroup = 7A09854E1D2D71120095737F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7A09854C1D2D71120095737F /* PXGoogleDirections */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7A09854B1D2D71120095737F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 906178DEA22C8602123CE3A5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + F662D553D8181D0747B983F6 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PXGoogleDirections/Pods-PXGoogleDirections-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7A0985481D2D71120095737F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A083DFB1D2D723F00B42940 /* PXGoogleDirectionsTransitLine.swift in Sources */, + 7A083DF21D2D723F00B42940 /* PXGoogleDirectionsResponse.swift in Sources */, + 7A083DEF1D2D723F00B42940 /* PXGoogleDirectionsDistance.swift in Sources */, + 7A083DFE1D2D723F00B42940 /* PXTime.swift in Sources */, + 7A083DF71D2D723F00B42940 /* PXGoogleDirectionsRouteLegStepTransitDetails.swift in Sources */, + 7A083DF31D2D723F00B42940 /* PXGoogleDirectionsRoute.swift in Sources */, + 7A083DF11D2D723F00B42940 /* PXGoogleDirectionsEnums.swift in Sources */, + 7A083DFC1D2D723F00B42940 /* PXGoogleDirectionsTransitLineVehicle.swift in Sources */, + 7A083DFA1D2D723F00B42940 /* PXGoogleDirectionsTransitAgency.swift in Sources */, + 7A083DFF1D2D723F00B42940 /* PXUtils.swift in Sources */, + 7A083DF41D2D723F00B42940 /* PXGoogleDirectionsRouteFare.swift in Sources */, + 7A083DF01D2D723F00B42940 /* PXGoogleDirectionsDuration.swift in Sources */, + 7A083DF51D2D723F00B42940 /* PXGoogleDirectionsRouteLeg.swift in Sources */, + 7A083DF61D2D723F00B42940 /* PXGoogleDirectionsRouteLegStep.swift in Sources */, + 7A083DFD1D2D723F00B42940 /* PXLocation.swift in Sources */, + 7A083DF81D2D723F00B42940 /* PXGoogleDirectionsStop.swift in Sources */, + 7A083DEE1D2D723F00B42940 /* PXGoogleDirections.swift in Sources */, + 7A083DF91D2D723F00B42940 /* PXGoogleDirectionsTime.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7A0985531D2D71120095737F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7A0985541D2D71120095737F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7A0985561D2D71120095737F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 95ACA0ABED8E80D370DA7D3C /* Pods-PXGoogleDirections.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = PXGoogleDirections/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Poulpix.PXGoogleDirections; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 7A0985571D2D71120095737F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 40B3DE48E5D50B63C81FCFF7 /* Pods-PXGoogleDirections.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = PXGoogleDirections/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Poulpix.PXGoogleDirections; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7A0985471D2D71120095737F /* Build configuration list for PBXProject "PXGoogleDirections" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7A0985531D2D71120095737F /* Debug */, + 7A0985541D2D71120095737F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7A0985551D2D71120095737F /* Build configuration list for PBXNativeTarget "PXGoogleDirections" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7A0985561D2D71120095737F /* Debug */, + 7A0985571D2D71120095737F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7A0985441D2D71120095737F /* Project object */; +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..2196733 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcworkspace/contents.xcworkspacedata b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3a375a4 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/Info.plist b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirections.h b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirections.h new file mode 100644 index 0000000..23239e6 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirections.h @@ -0,0 +1,19 @@ +// +// PXGoogleDirections.h +// PXGoogleDirections +// +// Created by Romain on 06/07/2016. +// Copyright © 2016 RLT. All rights reserved. +// + +#import + +//! Project version number for PXGoogleDirections. +FOUNDATION_EXPORT double PXGoogleDirectionsVersionNumber; + +//! Project version string for PXGoogleDirections. +FOUNDATION_EXPORT const unsigned char PXGoogleDirectionsVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirections.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirections.swift new file mode 100755 index 0000000..766bf87 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirections.swift @@ -0,0 +1,652 @@ +// +// PXGoogleDirections.swift +// PXGoogleDirections +// +// Created by Romain on 01/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import CoreLocation +import GoogleMaps + +// MARK: PXGoogleDirectionsDelegate protocol +@objc public protocol PXGoogleDirectionsDelegate { + /** + Notifies the delegate that an API request is going to be sent. + + - parameter googleDirections: The `PXGoogleDirections` object issuing the request + - parameter requestURL: The URL that is going to be called + - returns: `true` if the request should be sent, `false` otherwise + */ + @objc optional func googleDirectionsWillSendRequestToAPI(_ googleDirections: PXGoogleDirections, withURL requestURL: URL) -> Bool + /** + Notifies the delegate that an API request has been sent. + + - parameter googleDirections: The `PXGoogleDirections` object issuing the request + - parameter requestURL: The URL that was called + */ + @objc optional func googleDirectionsDidSendRequestToAPI(_ googleDirections: PXGoogleDirections, withURL requestURL: URL) + /** + Notifies the delegate that (yet unparsed) response data has been received from the API. + + - parameter googleDirections: The `PXGoogleDirections` object that issued the request + - parameter data: An `NSData` object containing raw data received from the API + */ + @objc optional func googleDirections(_ googleDirections: PXGoogleDirections, didReceiveRawDataFromAPI data: Data) + /** + Notifies the delegate that an error occurred while trying to handle the response received from the API. + + - parameter googleDirections: The `PXGoogleDirections` object that issued the request + - parameter error: An `NSError` object describing the type and potential cause of the error + */ + @objc optional func googleDirectionsRequestDidFail(_ googleDirections: PXGoogleDirections, withError error: NSError) + /** + Notifies the delegate that a response has been successfully received and parsed from the API. + + - parameter googleDirections: The `PXGoogleDirections` object that issued the request + - parameter apiResponse: A list of `PXGoogleDirectionsRoute` objects containing all relevant data received from the API + */ + @objc optional func googleDirections(_ googleDirections: PXGoogleDirections, didReceiveResponseFromAPI apiResponse: [PXGoogleDirectionsRoute]) +} + +// MARK: PXGoogleDirectionsSteppable protocol +protocol PXGoogleDirectionsSteppable { + var steps: [PXGoogleDirectionsRouteLegStep] { get set } +} + +public typealias PXGoogleDirectionsRequestCompletionBlock = (PXGoogleDirectionsResponse) -> Void + +// MARK: PXGoogleDirections class +public class PXGoogleDirections: NSObject { + + // MARK: Private class variables and consants + + fileprivate static let errorDomain = "PXGoogleDirectionsErrorDomain" + fileprivate static let _apiBaseURL = "https://maps.googleapis.com/maps/api/directions/json" + fileprivate static var _apiKey = "" + fileprivate static var apiKey: String { + get { + return _apiKey + } + set { + _apiKey = newValue + GMSServices.provideAPIKey(_apiKey) + } + } + + // MARK: Class variables + + /// The Google Directions API base URL (readonly). + public static var apiBaseURL: String { return _apiBaseURL } + /// Returns `true` if the Google Maps app is installed and can open places and directions URLs, `false` otherwise + public static var canOpenInGoogleMaps: Bool { + return UIApplication.shared.canOpenURL(URL(string: "comgooglemaps://")!) && UIApplication.shared.canOpenURL(URL(string: "comgooglemaps-x-callback://")!) + } + + // MARK: Instance variables + + /// The address or textual latitude/longitude value from which directions should be calculated (if an address is passed, the Directions API will geocode it and convert it to a latitude/longitude coordinate to calculate directions) + public var from: PXLocation! + /// The address or textual latitude/longitude value of the destination of the directions request (if an address is passed, the Directions API will geocode it and convert it to a latitude/longitude coordinate to calculate directions) + public var to: PXLocation! + /// Specifies the mode of transport to use when calculating directions (defaults to `Driving`) + public var mode: PXGoogleDirectionsMode? + /// Specifies an array of waypoints (either a latitude/longitude coordinate or as an address which will be geocoded) ; waypoints alter a route by routing it through the specified location(s), and are only supported for driving, walking and bicycling directions + public var waypoints = [PXLocation]() + /// By default, the Directions service calculates a route through the provided waypoints in their given order, but optionally, it can be allowed to optimize the provided route by rearranging the waypoints in a more efficient order + public var optimizeWaypoints: Bool? + /// If set to `true`, specifies that the API may provide more than one route alternative in the response + public var alternatives: Bool? + /// Indicates that the calculated routes should avoid the indicated features + public var featuresToAvoid = Set() + /// Specifies the unit system to use when displaying results + public var units: PXGoogleDirectionsUnit? + ///Specifies the desired time of departure + public var departureTime: PXTime? + /// Specifies the desired time of arrival (for transit directions only) + public var arrivalTime: PXTime? + /// Specifies the assumptions to use when calculating time in traffic + public var trafficModel: PXGoogleDirectionsTrafficModel? + /// Specifies one or more preferred modes of transit + public var transitModes = Set() + /// Specifies preferences for transit routes + public var transitRoutingPreference: PXGoogleDirectionsTransitRoutingPreference? + /// Specifies the language in which to return results (if invalid or not supplied, the service will attempt to use the native language of the domain from which the request is sent) + public var language: String? + /// Specifies the region code, specified as a ccTLD ("top-level domain") two-character value (can be practically utilized with any domain in which the main Google Maps application has launched driving directions) + public var region: String? + /// Specifies an optional delegate that will be notified of all events regarding the Google Directions API + public var delegate: PXGoogleDirectionsDelegate? + + // MARK: Properties + + /** + Tries to build an instance of `NSURL` pointing to the Google Directions API using the specified parameters, or `nil`. + */ + public var directionsAPIRequestURL: URL? { + // Ensure both origin and destination are set + if let f = from, let t = to { + // Ensure there is actually something specified for both origin and destination addresses + if !f.isSpecified() || !t.isSpecified() { + return nil + } + // Create the base URL with minimal arguments + var preparedRequest = "\(PXGoogleDirections.apiBaseURL)?key=\(PXGoogleDirections.apiKey)&origin=\(f)&destination=\(t)" + // Handle transport mode + if let m = mode { + preparedRequest += "&mode=\(m)" + } + // Handle optional waypoints + if waypoints.count > 0 { + let wp = waypoints.map({ $0.description }).joined(separator: "|") + let opt = ((optimizeWaypoints ?? false) ? "optimize:true|" : "") + preparedRequest += "&waypoints=\(opt)\(wp)" + } + // Handle request for alternative routes + if let a = alternatives { + let alt = (a ? "true" : "false") + preparedRequest += "&alternatives=\(alt)" + } + // Handle request for features to avoid + if featuresToAvoid.count > 0 { + let fta = featuresToAvoid.map({ $0.description }).joined(separator: "|") + preparedRequest += "&avoid=\(fta)" + } + // Handle results language + if let l = language { + preparedRequest += "&language=\(l)" + } + // Handle unit system + if let u = units { + preparedRequest += "&units=\(u)" + } + // Handle region bias + if let r = region { + preparedRequest += "®ion=\(r)" + } + // Handle departure time + if let dt = departureTime { + preparedRequest += "&departure_time=\(dt)" + } + // Handle arrival time + if let at = arrivalTime { + if departureTime != nil { + // Can't set both departure_time and arrival_time + return nil + } + if mode == .transit && at != .now { + preparedRequest += "&arrival_time=\(at)" + } + } + // Handle traffic model + if let tm = trafficModel { + if departureTime != nil && mode == .driving { + preparedRequest += "&traffic_model=\(tm)" + } + } + // Handle public transit mode + if transitModes.count > 0 { + if mode == .transit { + let tm = transitModes.map({ $0.description }).joined(separator: "|") + preparedRequest += "&transit_mode=\(tm)" + } + } + // Handle public transit routing preference + if let trp = transitRoutingPreference { + if mode == .transit { + preparedRequest += "&transit_routing_preference=\(trp)" + } + } + // Try to build the suitable NSURL and return it + if let requestURL = preparedRequest.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { + return URL(string: requestURL) + } else { + // Error while building NSURL + return nil + } + } else { + // Missing source and/or destination + return nil + } + } + + // MARK: Initializers + + /** + Creates a new instance of `PXGoogleDirections` with the specified API key. + + - parameter apiKey: Your own API key, provided by Google + */ + public init(apiKey: String) { + super.init() + PXGoogleDirections.apiKey = apiKey + } + + /** + Creates a new instance of `PXGoogleDirections` with the specified API key, origin and destination. + + - parameter apiKey: Your own API key, provided by Google + - parameter from: The address or textual latitude/longitude value from which directions should be calculated + - parameter to: The address or textual latitude/longitude value of the destination of the directions request + */ + public convenience init(apiKey: String, from: PXLocation, to: PXLocation) { + self.init(apiKey: apiKey) + self.from = from + self.to = to + } + + // MARK: Public functions + + /** + Performs a Google Directions API request with the specified parameters and calls the block when finished. + + - parameter completion: The completion block called when the request is done, or in case of any error + */ + public func calculateDirections(_ completion: @escaping PXGoogleDirectionsRequestCompletionBlock) + { + // Try to create a request URL using the supplied parameters + if let requestURL = directionsAPIRequestURL { + // Show network activity indicator + UIApplication.shared.isNetworkActivityIndicatorVisible = true + // Notify delegeate (if any) + let runQuery = (delegate == nil ? true : (delegate!.googleDirectionsWillSendRequestToAPI?(self, withURL: requestURL) ?? true)) + // Handle the case where the delegate might have askeed to cancel the request + if runQuery { + URLSession.shared.dataTask(with: requestURL, completionHandler: { (data, response, error) -> Void in + // Hide network activity indicator + UIApplication.shared.isNetworkActivityIndicatorVisible = false + // Notify delegate + self.delegate?.googleDirections?(self, didReceiveRawDataFromAPI: data!) + // Check for any error (from an NSURLSession point of view) + if error == nil { + var response = [PXGoogleDirectionsRoute]() + // Try to parse the received JSON data + do { + if let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: AnyObject] { + // Try fo fetch the API response status code + if let st = json["status"] as? String { + let status = PXGoogleDirectionsError.errorFromStatus(st) + // Handle any potential error status code the API might have returned + if status.failed { + // API error received: notify delegate and call completion block (with error value) + let err = self.prepareError(status) + self.delegate?.googleDirectionsRequestDidFail?(self, withError: err) + completion(.error(self, err)) + return + } else { + // From here on: try to parse and process the received data + if let routes = json["routes"] as AnyObject? as? [[String: AnyObject]] { + // Loop through routes + for r in routes { + // Create a new route object + let currentRoute = PXGoogleDirectionsRoute() + // General route information + currentRoute.summary = r["summary"] as? String + currentRoute.copyrights = r["copyrights"] as? String + // Route fare + if let fare = r["fare"] as? [String: AnyObject] { + currentRoute.fare = PXGoogleDirectionsRouteFare(currency: fare["currency"] as? String, value: fare["value"] as? Double) + } + // Overview polyline + if let polyline = r["overview_polyline"] as? [String: String] { + currentRoute.overviewPolyline = polyline["points"] + } + // Bounds + if let bounds = r["bounds"] as? [String: AnyObject] { + var northEastBound: CLLocationCoordinate2D? + var southWestBound: CLLocationCoordinate2D? + if let northeast = bounds["northeast"] as? [String: Double] { + if let neLat = northeast["lat"], let neLng = northeast["lng"] { + northEastBound = CLLocationCoordinate2DMake(neLat, neLng) + } + } + if let southwest = bounds["southwest"] as? [String: Double] { + if let swLat = southwest["lat"], let swLng = southwest["lng"] { + southWestBound = CLLocationCoordinate2DMake(swLat, swLng) + } + } + if northEastBound != nil && southWestBound != nil { + currentRoute.bounds = GMSCoordinateBounds(coordinate: northEastBound!, coordinate: southWestBound!) + } + } + // Warnings + if let warnings = r["warnings"] as? [String] { + for w in warnings { + currentRoute.warnings.append(w) + } + } + // Waypoint order + if let wpOrder = r["waypoint_order"] as? [Int] { + for wp in wpOrder { + currentRoute.waypointsOrder.append(wp) + } + } + // Route legs + if let legs = r["legs"] as? [[String: AnyObject]] { + // Loop through legs + for l in legs { + // Create a new leg object + var currentLeg = PXGoogleDirectionsRouteLeg() + // General leg information + currentLeg.startAddress = l["start_address"] as? String + if let startLocation = l["start_location"] as? [String: CLLocationDegrees] { + if let slLat = startLocation["lat"], let slLng = startLocation["lng"] { + currentLeg.startLocation = CLLocationCoordinate2DMake(slLat, slLng) + } + } + currentLeg.endAddress = l["end_address"] as? String + if let endLocation = l["end_location"] as? [String: CLLocationDegrees] { + if let elLat = endLocation["lat"], let elLng = endLocation["lng"] { + currentLeg.endLocation = CLLocationCoordinate2DMake(elLat, elLng) + } + } + // Distance + if let distance = l["distance"] as? [String: AnyObject] { + currentLeg.distance = PXGoogleDirectionsDistance(distance: distance["value"] as? CLLocationDistance, description: distance["text"] as? String) + } + // Duration + if let duration = l["duration"] as? [String: AnyObject] { + currentLeg.duration = PXGoogleDirectionsDuration(duration: duration["value"] as? TimeInterval, description: duration["text"] as? String) + } + // Duration in traffic + if let durationT = l["duration_in_traffic"] as? [String: AnyObject] { + if let dTText = durationT["text"] as? String, let dTValue = durationT["value"] as? TimeInterval { + currentLeg.durationInTraffic = PXGoogleDirectionsDuration(duration: dTValue, description: dTText) + } + } + // Departure time + if let departure = l["departure_time"] as? [String: AnyObject] { + currentLeg.departureTime = PXGoogleDirectionsTime(description: departure["text"] as? String, timeZone: nil, timestamp: departure["value"] as? TimeInterval) + if let dTZ = departure["time_zone"] as? String { + currentLeg.arrivalTime?.timeZone = TimeZone(identifier: dTZ) + } + } + // Arrival time + if let arrival = l["arrival_time"] as? [String: AnyObject] { + currentLeg.arrivalTime = PXGoogleDirectionsTime(description: arrival["text"] as? String, timeZone: nil, timestamp: arrival["value"] as? TimeInterval) + if let aTZ = arrival["time_zone"] as? String { + currentLeg.arrivalTime?.timeZone = TimeZone(identifier: aTZ) + } + } + // Leg steps + if let _ = l["steps"] as? [[String: AnyObject]] { + currentLeg.steps = self.handleSteps(l) + } + // Add the leg to the current route object + currentRoute.legs.append(currentLeg) + } + } + // Add the route to the response object + response.append(currentRoute) + } + } + } + } else { + // API response status code missing: notify delegate and call completion block (with error value) + let err = self.prepareError(.missingStatusCode) + self.delegate?.googleDirectionsRequestDidFail?(self, withError: err) + completion(.error(self, err)) + return + } + } else { + // Unable to parse the API response: notify delegate and call completion block (with error value) + let err = self.prepareError(.badJSONFormatting) + self.delegate?.googleDirectionsRequestDidFail?(self, withError: err) + completion(.error(self, err)) + return + } + } catch { + return + } + // Everything went well up to this point: ready to forward results to delegate and callback + DispatchQueue.main.async { + // Success: notify delegate and call completion block (with success value) + self.delegate?.googleDirections?(self, didReceiveResponseFromAPI: response) + completion(.success(self, response)) + return + } + } else { + // Generic NSURLSession error: notify delegate and call completion block (with error value) + self.delegate?.googleDirectionsRequestDidFail?(self, withError: error! as NSError) + completion(PXGoogleDirectionsResponse.error(self, error! as NSError)) + return + } + }).resume() + // Notify delegate + delegate?.googleDirectionsDidSendRequestToAPI?(self, withURL: requestURL) + } + } else { + // Unable to create an API URL with the supplied arguments: notify delegate and call completion block (with error value) + let err = prepareError(.badAPIURL) + delegate?.googleDirectionsRequestDidFail?(self, withError: err) + completion(.error(self, err)) + return + } + } + + /** + Tries to open the selected directions request in the Google Maps app. + + - parameter center: the map viewport center point + - parameter mapMode: the kind of map shown (if not specified, the current application settings will be used) + - parameter view: turns specific views on/off, multiple values can be set using a comma-separator (if the parameter is specified with no value, then it will clear all views) + - parameter zoom: specifies the zoom level of the map + - parameter callbackURL: the URL to call when complete ; often this will be a URL scheme allowing users to return to the original application + - parameter callbackName: the name of the application sending the callback request (short names are preferred) + - parameter fallbackToAppleMaps: `true` to fall back to Apple Maps in case Google Maps is not installed, `false` otherwise + - returns: `true` if opening in the Google Maps is available, `false` otherwise + */ + public func openInGoogleMaps(center: CLLocationCoordinate2D?, mapMode: PXGoogleMapsMode?, view: Set?, zoom: UInt?, callbackURL: URL?, callbackName: String?, fallbackToAppleMaps: Bool = true) -> Bool { + // Ensure both origin and destination are set + if let f = from, let t = to { + // Ensure there is actually something specified for both origin and destination addresses + if f.isSpecified() && t.isSpecified() { + // Prepare the base URL parameters with provided arguments + var params = PXGoogleDirections.handleGoogleMapsURL(center: center, mapMode: mapMode, view: view, zoom: zoom) + // Add origin and destination + params.append("saddr=\(f.description.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + params.append("daddr=\(t.description.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + // Add optional method of transportation, if any + if let m = mode { + params.append("directionsmode=\(m)") + } + // Build the Google Maps URL and open it + if let url = PXGoogleDirections.buildGoogleMapsURL(params: params, callbackURL: callbackURL, callbackName: callbackName) { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return true + } else { + // Apply fallback strategy + if fallbackToAppleMaps { + var params = PXGoogleDirections.handleAppleMapsURL(center: center, mapMode: mapMode, view: view, zoom: zoom) + params.append("saddr=\(f.description.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + params.append("daddr=\(t.description.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + let p = (params.count > 0) ? "?" + params.joined(separator: "&") : "" + UIApplication.shared.open(URL(string: "https://maps.apple.com/\(p)")!, options: [:], completionHandler: nil) + return true + } + } + } + } + return false + } + + // MARK: Private functions + + fileprivate func prepareError(_ code: PXGoogleDirectionsError) -> NSError { + return NSError(domain: PXGoogleDirections.errorDomain, code: code.rawValue, userInfo: [NSLocalizedDescriptionKey: code.description]) + } + + fileprivate func handleSteps(_ jsonData: [String: AnyObject]) -> [PXGoogleDirectionsRouteLegStep] { + var results = [PXGoogleDirectionsRouteLegStep]() + if let steps = jsonData["steps"] as? [[String: AnyObject]] { + for s in steps { + // Loop through steps + let currentStep = PXGoogleDirectionsRouteLegStep() + // General step information + if let startLocation = s["start_location"] as? [String: CLLocationDegrees] { + if let slLat = startLocation["lat"], let slLng = startLocation["lng"] { + currentStep.startLocation = CLLocationCoordinate2DMake(slLat, slLng) + } + } + if let endLocation = s["end_location"] as? [String: CLLocationDegrees] { + if let elLat = endLocation["lat"], let elLng = endLocation["lng"] { + currentStep.endLocation = CLLocationCoordinate2DMake(elLat, elLng) + } + } + currentStep.htmlInstructions = s["html_instructions"] as? String + currentStep.maneuver = s["maneuver"] as? String + currentStep.travelMode = PXGoogleDirectionsMode.modeFromLabel((s["travel_mode"] as? String) ?? "") + // Distance + if let distance = s["distance"] as? [String: AnyObject] { + currentStep.distance = PXGoogleDirectionsDistance(distance: distance["value"] as? CLLocationDistance, description: distance["text"] as? String) + } + // Duration + if let duration = s["duration"] as? [String: AnyObject] { + currentStep.duration = PXGoogleDirectionsDuration(duration: duration["value"] as? TimeInterval, description: duration["text"] as? String) + } + // Polyline + if let polyline = s["polyline"] as? [String: String] { + currentStep.polyline = polyline["points"] + } + // Transit details + if let transitDetails = s["transit_details"] as? [String: AnyObject] { + // General transit details information + currentStep.transitDetails = PXGoogleDirectionsRouteLegStepTransitDetails() + currentStep.transitDetails?.headsign = transitDetails["headsign"] as? String + currentStep.transitDetails?.headway = transitDetails["headway"] as? TimeInterval + currentStep.transitDetails?.nbStops = transitDetails["num_stops"] as? UInt + // Departure stop + if let departureStop = transitDetails["departure_stop"] as? [String: AnyObject] { + if let dsName = departureStop["name"] as? String, let dsLocation = departureStop["location"] as? [String: CLLocationDegrees] { + if let dslLat = dsLocation["lat"], let dslLng = dsLocation["lng"] { + currentStep.transitDetails?.departureStop = PXGoogleDirectionsStop(description: dsName, location: CLLocationCoordinate2DMake(dslLat, dslLng)) + } + } + } + // Arrival stop + if let arrivalStop = transitDetails["arrival_stop"] as? [String: AnyObject] { + if let asName = arrivalStop["name"] as? String, let asLocation = arrivalStop["location"] as? [String: CLLocationDegrees] { + if let aslLat = asLocation["lat"], let aslLng = asLocation["lng"] { + currentStep.transitDetails?.arrivalStop = PXGoogleDirectionsStop(description: asName, location: CLLocationCoordinate2DMake(aslLat, aslLng)) + } + } + } + // Departure time + if let departure = transitDetails["departure_time"] as? [String: AnyObject] { + currentStep.transitDetails?.departureTime = PXGoogleDirectionsTime(description: departure["text"] as? String, timeZone: nil, timestamp: departure["value"] as? TimeInterval) + if let dTZ = departure["time_zone"] as? String { + currentStep.transitDetails?.departureTime?.timeZone = TimeZone(identifier: dTZ) + } + } + // Arrival time + if let arrival = transitDetails["arrival_time"] as? [String: AnyObject] { + currentStep.transitDetails?.arrivalTime = PXGoogleDirectionsTime(description: arrival["text"] as? String, timeZone: nil, timestamp: arrival["value"] as? TimeInterval) + if let aTZ = arrival["time_zone"] as? String { + currentStep.transitDetails?.arrivalTime?.timeZone = TimeZone(identifier: aTZ) + } + } + // Line + if let line = transitDetails["line"] as? [String: AnyObject] { + // General line information + currentStep.transitDetails?.line = PXGoogleDirectionsTransitLine() + currentStep.transitDetails?.line?.color = UIColor(hexColor: (line["color"] as? String) ?? "") + currentStep.transitDetails?.line?.name = line["name"] as? String + currentStep.transitDetails?.line?.shortName = line["short_name"] as? String + currentStep.transitDetails?.line?.textColor = UIColor(hexColor: (line["text_color"] as? String) ?? "") + currentStep.transitDetails?.line?.url = URL(string: (line["url"] as? String) ?? "") + // Icon + if let iconUrl = URL(string: (line["icon"] as? String) ?? "") { + if let data = try? Data(contentsOf: iconUrl) { + currentStep.transitDetails?.line?.icon = UIImage(data: data) + } + } + // Agencies + if let agencies = line["agencies"] as? [[String: String]] { + for a in agencies { + currentStep.transitDetails?.line?.agencies.append(PXGoogleDirectionsTransitAgency(name: a["name"], url: URL(string: (a["url"] ?? "")), phone: a["phone"])) + } + } + // Vehicle + if let vehicle = line["vehicle"] as? [String: String] { + if let vName = vehicle["name"], let vType = vehicle["type"], let vIconURL = URL(string: vehicle["icon"] ?? "") { + currentStep.transitDetails?.line?.vehicle = PXGoogleDirectionsTransitLineVehicle(name: vName, type: PXGoogleDirectionsVehicleType.vehicleTypeFromValue(vType), icon: nil) + if let data = try? Data(contentsOf: vIconURL) { + currentStep.transitDetails?.line?.vehicle?.icon = UIImage(data: data) + } + } + } + } + // Sub-steps + if let _ = s["steps"] as? [[String: AnyObject]] { + currentStep.steps = handleSteps(s) + } + } + // Add the step to results + results.append(currentStep) + } + } + return results + } + + internal class func handleGoogleMapsURL(center: CLLocationCoordinate2D?, mapMode: PXGoogleMapsMode?, view: Set?, zoom: UInt?) -> [String] { + var params = [String]() + if let loc = center { + params.append("center=\(loc.latitude),\(loc.longitude)") + } + if let mm = mapMode { + params.append("mapmode=\(mm.description)") + } + if let v = view { + if v.count > 0 { + let vcs = v.map({ $0.description }).joined(separator: ",") + params.append("view=\(vcs)") + } + } + if let z = zoom { + params.append("zoom=\(z)") + } + return params + } + + internal class func handleAppleMapsURL(center: CLLocationCoordinate2D?, mapMode: PXGoogleMapsMode?, view: Set?, zoom: UInt?) -> [String] { + var params = [String]() + if let loc = center { + params.append("ll=\(loc.latitude),\(loc.longitude)") + } + var allowedToAddZAndT = true + if let mm = mapMode { + if mm == .streetView { + params.append("z=19") + params.append("t=k") + allowedToAddZAndT = false + } + } + if let v = view { + if v.contains(.satellite) && allowedToAddZAndT { + params.append("t=h") + } + } + if let z = zoom { + if allowedToAddZAndT { + params.append("z=\(z)") + } + } + return params + } + + internal class func buildGoogleMapsURL(params: [String], callbackURL: URL?, callbackName: String?) -> URL? { + var p = params + if PXGoogleDirections.canOpenInGoogleMaps { + var scheme = "comgooglemaps" + if let cbURL = callbackURL, let cbn = callbackName { + scheme = "comgooglemaps-x-callback" + p.append("x-success=\(cbURL.absoluteString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + p.append("x-source=\(cbn.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + } + return URL(string: "\(scheme)://\((p.count > 0) ? "?" + p.joined(separator: "&") : "")")! + } else { + return nil + } + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsDistance.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsDistance.swift new file mode 100644 index 0000000..81a432b --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsDistance.swift @@ -0,0 +1,18 @@ +// +// PXGoogleDirectionsDistance.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import CoreLocation + +/// The total distance covered by a route leg +public struct PXGoogleDirectionsDistance { + /// Indicates the distance in meters + public var distance: CLLocationDistance? + /// Human-readable representation of the distance, displayed in units as used at the origin (or as overridden within the units parameter in the request) + public var description: String? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsDuration.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsDuration.swift new file mode 100644 index 0000000..a6d898a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsDuration.swift @@ -0,0 +1,17 @@ +// +// PXGoogleDirectionsDuration.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// The total duration of a route leg +public struct PXGoogleDirectionsDuration { + /// The duration in seconds + public var duration: TimeInterval? + /// A human-readable representation of the duration + public var description: String? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsEnums.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsEnums.swift new file mode 100644 index 0000000..88a6a7d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsEnums.swift @@ -0,0 +1,388 @@ +// +// PXGoogleDirectionsEnums.swift +// PXGoogleDirections +// +// Created by Romain on 01/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// Possible error codes in the Google Directions API +public enum PXGoogleDirectionsError: Int { + /// Indicates the response contains a valid result + case ok = 0 + /// Indicates at least one of the locations specified in the request's origin, destination, or waypoints could not be geocoded + case notFound + /// Indicates no route could be found between the origin and destination + case zeroResults + /// Indicates that too many waypoints were provided in the request (the maximum allowed waypoints is 8, plus the origin, and destination) + case maxWaypointsExceeded + /// Indicates that the provided request was invalid. Common causes of this status include an invalid parameter or parameter value + case invalidRequest + /// Indicates the service has received too many requests from this application within the allowed time period + case overQueryLimit + /// Indicates that the service denied use of the directions service by this application + case requestDenied + /// Indicates a directions request could not be processed due to a server error (may succeed with an other attempt) + case unknownError + /// Indicates the inability to generate a valid request URL + case badAPIURL + /// Indicates the inability to parse JSON data returned from the API + case badJSONFormatting + /// Indicates the response status code was unexpectedly missing from the JSON data + case missingStatusCode + + public var description: String { + switch self { + case .ok: + return "OK" + case .notFound: + return "At least one of the locations specified in the request's origin, destination, or waypoints could not be geocoded" + case .zeroResults: + return "No route could be found between the specified origin and destination" + case .maxWaypointsExceeded: + return "Too many waypointss were provided in the request" + case .invalidRequest: + return "The provided request was invalid" + case .overQueryLimit: + return "The service has received too many requests from this application within the allowed time period" + case .requestDenied: + return "The service denied use of the directions service by this application" + case .unknownError: + return "The directions request could not be processed due to a server error" + case .badAPIURL: + return "Unable to build a suitable URL for API request" + case .badJSONFormatting: + return "Unable to parse JSON data returned from the API" + case .missingStatusCode: + return "Response status code unexpectedly missing from the response payload" + } + } + + /** + Returns an `PXGoogleDirectionsError` object corresponding to the status code returned by the API for a specific response. + + - parameter status: The status code returned by the API + - returns: The corresponding `PXGoogleDirectionsError` instance + */ + static func errorFromStatus(_ status: String) -> PXGoogleDirectionsError { + switch (status) { + case "OK": + return .ok + case "NOT_FOUND": + return .notFound + case "ZERO_RESULTS": + return .zeroResults + case "MAX_WAYPOINTS_EXCEEDED": + return .maxWaypointsExceeded + case "INVALID_REQUEST": + return .invalidRequest + case "OVER_QUERY_LIMIT": + return .overQueryLimit + case "REQUEST_DENIED": + return .requestDenied + case "UNKNOWN_ERROR": + return .unknownError + default: + return .unknownError + } + } + + /// Returns `true` if this status code indicates an error during the API request process, or `false` otherwise + public var failed: Bool { return (self != .ok) } +} + +/// The mode of transport used when calculating directions +public enum PXGoogleDirectionsMode: Int { + /// Caclulate directions by car/automobile + case driving = 0 + /// Calculate directions by walk + case walking + /// Calculate directions by bicycle + case bicycling + /// Calculate directions with public transports + case transit + + /** + Returns an `PXGoogleDirectionsMode` object corresponding to the status code returned by the API for a specific response. + + - parameter label: The label returned by the API + - returns: The corresponding `PXGoogleDirectionsMode` instance, or `nil` if no appropriate mode is found + */ + public static func modeFromLabel(_ label: String) -> PXGoogleDirectionsMode? { + switch label { + case "DRIVING": + return .driving + case "WALKING": + return .walking + case "BICYCLING": + return .bicycling + case "TRANSIT": + return .transit + default: + return nil + } + } +} + +extension PXGoogleDirectionsMode: CustomStringConvertible { + public var description: String { + switch self { + case .driving: + return "driving" + case .walking: + return "walking" + case .bicycling: + return "bicycling" + case .transit: + return "transit" + } + } +} + +/// The assumptions to use when calculating time in traffic +/// +/// This setting affects the value returned in the `durationInTraffic` field in the response, which contains the predicted time in traffic based on historical averages. The `trafficModel` parameter may only be specified for driving directions where the request includes a `departureTime`, and only if the request includes an API key or a Google Maps APIs Premium Plan client ID. +/// +/// The default value of `bestGuess` will give the most useful predictions for the vast majority of use cases. The `bestGuess` travel time prediction may be shorter than `optimistic`, or alternatively, longer than `pessimistic`, due to the way the `bestGuess` prediction model integrates live traffic information. +public enum PXGoogleDirectionsTrafficModel: Int { + /// Indicates that the returned `durationInTraffic` should be the best estimate of travel time given what is known about both historical traffic conditions and live traffic; live traffic becomes more important the closer the `departureTime` is to now + case bestGuess = 0 + /// Indicates that the returned `durationInTraffic` should be longer than the actual travel time on most days, though occasional days with particularly bad traffic conditions may exceed this value + case pessimistic + /// Indicates that the returned `durationInTraffic` should be shorter than the actual travel time on most days, though occasional days with particularly good traffic conditions may be faster than this value + case optimistic +} + +extension PXGoogleDirectionsTrafficModel: CustomStringConvertible { + public var description: String { + switch self { + case .bestGuess: + return "best_guess" + case .pessimistic: + return "pessimistic" + case .optimistic: + return "optimistic" + } + } +} + +/// Features that should be avoided when calculating routes +public enum PXGoogleDirectionsFeature: Int { + /// The calculated route should avoid toll roads/bridges + case tolls = 0 + /// The calculated route should avoid highways + case highways + /// The calculated route should avoid ferries + case ferries +} + +extension PXGoogleDirectionsFeature: CustomStringConvertible { + public var description: String { + switch self { + case .tolls: + return "tolls" + case .highways: + return "highways" + case .ferries: + return "ferries" + } + } +} + +/// The unit system to use when displaying results (by default, the texts are rendered using the unit system of the origin's country or region) +public enum PXGoogleDirectionsUnit: Int { + /// Use the metric system (textual distances are returned using kilometers and meters) + case metric = 0 + /// Use the imperial (English) system (textual distances are returned using kilometers and meters) + case imperial +} + +extension PXGoogleDirectionsUnit: CustomStringConvertible { + public var description: String { + switch self { + case .metric: + return "metric" + case .imperial: + return "imperial" + } + } +} + +/// Preferred modes of transit (only valid for transit directions) +public enum PXGoogleDirectionsTransitMode: Int { + /// The calculated route should prefer travel by bus + case bus = 0 + /// The calculated route should prefer travel by subway + case subway + /// The calculated route should prefer travel by train + case train + /// The calculated route should prefer travel by tram and light rail + case tram + /// The calculated route should prefer travel by train, tram, light rail, and subway (equivalent to `Train` + `Tram`+ `Subway`) + case rail +} + +extension PXGoogleDirectionsTransitMode: CustomStringConvertible { + public var description: String { + switch self { + case .bus: + return "bus" + case .subway: + return "subway" + case .train: + return "train" + case .tram: + return "tram" + case .rail: + return "rail" + } + } +} + +/// Preferences for transit routes only ; using this parameter, the options returned can be biased, rather than accepting the default best route chosen by the API +public enum PXGoogleDirectionsTransitRoutingPreference: Int { + /// Indicates that the calculated route should prefer limited amounts of walking + case lessWalking = 0 + /// Indicates that the calculated route should prefer a limited number of transfers + case fewerTransfers +} + +extension PXGoogleDirectionsTransitRoutingPreference: CustomStringConvertible { + public var description: String { + switch self { + case .lessWalking: + return "less_walking" + case .fewerTransfers: + return "fewer_transfers" + } + } +} + +/// Type of vehicles that run on transit lines +public enum PXGoogleDirectionsVehicleType: Int { + /// Rail + case rail = 0 + /// Light rail transit + case metroRail + /// Underground light rail + case subway + /// Above ground light rail + case tram + /// Monorail + case monorail + /// Heavy rail + case heavyRail + /// Commuter rail + case commuterTrain + /// High speed train + case highSpeedTrain + /// Bus + case bus + /// Intercity bus + case intercityBus + /// Trolleybys + case trolleybus + /// Share taxi is a kind of bus with the ability to drop off and pick up passengers anywhere on its route + case shareTaxi + /// Ferry + case ferry + /// A vehicle that operates on a cable, usually on the ground (aerial cable cars may be of the type `GondolaLift`) + case cableCar + /// An aerial cable car + case gondolaLift + /// A vehicle that is pulled up a steep incline by a cable ; a funicular typically consists of two cars, with each car acting as a counterweight for the other + case funicular + /// All other vehicles will return this type + case other + + /** + Returns an `PXGoogleDirectionsVehicleType` object corresponding to the vehicle type returned by the API for a specific line. + + - parameter value: The vehicle type code returned by the API + - returns: The corresponding `PXGoogleDirectionsVehicleType` instance + */ + public static func vehicleTypeFromValue(_ value: String) -> PXGoogleDirectionsVehicleType { + switch value { + case "RAIL": + return .rail + case "METRO_RAIL": + return .metroRail + case "SUBWAY": + return .subway + case "TRAM": + return .tram + case "MONORAIL": + return .monorail + case "HEAVY_RAIL": + return .heavyRail + case "COMMUTER_TRAIN": + return .commuterTrain + case "HIGH_SPEED_TRAIN": + return .highSpeedTrain + case "BUS": + return .bus + case "INTERCITY_BUS": + return .intercityBus + case "TROLLEYBUS": + return .trolleybus + case "SHARE_TAXI": + return .shareTaxi + case "FERRY": + return .ferry + case "CABLE_CAR": + return .cableCar + case "GONDOLA_LIFT": + return .gondolaLift + case "FUNICULAR": + return .funicular + case "OTHER": + return .other + default: + return .other + } + } +} + +/// Kind of map shown when opening a location or direction in the Google Maps app +public enum PXGoogleMapsMode: Int { + /// Standard map view + case standard = 0 + /// Google Street View mode + case streetView +} + +extension PXGoogleMapsMode: CustomStringConvertible { + public var description: String { + switch self { + case .standard: + return "standard" + case .streetView: + return "streetview" + } + } +} + +/// Turns specific views on or off, like satellite, traffic or transit +public enum PXGoogleMapsView: Int { + /// Turns satellite view on + case satellite = 0 + /// Turns traffic view on + case traffic + /// Turns transit view on + case transit +} + +extension PXGoogleMapsView: CustomStringConvertible { + public var description: String { + switch self { + case .satellite: + return "satellite" + case .traffic: + return "traffic" + case .transit: + return "transit" + } + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsResponse.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsResponse.swift new file mode 100644 index 0000000..2260c0a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsResponse.swift @@ -0,0 +1,27 @@ +// +// PXGoogleDirectionsResponse.swift +// PXGoogleDirections +// +// Created by Romain on 01/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// An enum describing response from the Google Directions API. +public enum PXGoogleDirectionsResponse { + /// When the API request succeeds, this enum case contains all data fetched from the Google Directions API + case success(PXGoogleDirections, [PXGoogleDirectionsRoute]) + /// In case of an API request error, the additionnal parameter will contain the reason of the error + case error(PXGoogleDirections, NSError) + + /// Returns `true` if this response indicates an error during the API request process, or `false` otherwise + public var failed: Bool { + switch self { + case .error(_, _): + return true + default: + return false + } + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRoute.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRoute.swift new file mode 100644 index 0000000..36c3348 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRoute.swift @@ -0,0 +1,153 @@ +// +// PXGoogleDirectionsRoute.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import GoogleMaps + +/// A route computed by the Google Directions API, following a directions request. A route consists of nested legs and steps. +public class PXGoogleDirectionsRoute: NSObject { + /// Short textual description for the route, suitable for naming and disambiguating the route from alternatives + public var summary: String? + /// Array which contains information about a leg of the route, between two locations within the given route (a separate leg will be present for each waypoint or destination specified: a route with no waypoints will contain exactly one leg within the legs array) ; each leg consists of a series of steps + public var legs: [PXGoogleDirectionsRouteLeg] = [PXGoogleDirectionsRouteLeg]() + /// Array indicating the order of any waypoints in the calculated route (waypoints may be reordered if the request was passed optimize:true within its waypoints parameter) + public var waypointsOrder: [Int] = [Int]() + /// Holds an encoded polyline representation of the route (this polyline is an approximate/smoothed path of the resulting directions) + public var overviewPolyline: String? + /// Viewport bounding box of the `overviewPolyline` + public var bounds: GMSCoordinateBounds? + /// Copyrights text to be displayed for this route + public var copyrights: String? + /// Array of warnings to be displayed when showing these directions + public var warnings: [String] = [String]() + /// Contains the total fare (that is, the total ticket costs) on this route (only valid for transit requests and routes where fare information is available for all transit legs) + public var fare: PXGoogleDirectionsRouteFare? + /// Returns the corresponding `GMSPath` object associated with this route + public var path: GMSPath? { + if let op = overviewPolyline { + return GMSPath(fromEncodedPath: op) + } else { + return nil + } + } + /// Returns a detailed `GMSPath` object built from the legs and steps composing the route + public var detailedPath: GMSPath? { + let dp = GMSMutablePath() + for l in legs { + for s in l.steps { + if let sl = s.startLocation { + dp.add(sl) + } + if let spl = s.polyline, let subpath = GMSPath(fromEncodedPath: spl) { + for i in 0 ..< subpath.count() { + dp.add(subpath.coordinate(at: i)) + } + } + if let el = s.endLocation { + dp.add(el) + } + } + } + return (dp.count() > 0 ? dp : path) + } + /// Returns the route's total duration, in seconds + public var totalDuration: TimeInterval { + get { + var td = 0 as TimeInterval + for l in legs { + guard let ld = l.duration, let d = ld.duration else { + break + } + td += d + } + return td + } + } + /// Returns the route's total distance, in meters + public var totalDistance: CLLocationDistance { + get { + var td = 0 as CLLocationDistance + for l in legs { + guard let ld = l.distance, let d = ld.distance else { + break + } + td += d + } + return td + } + } + + /** + Draws the route on the specified Google Maps map view. + + - parameter map: A `GMSMapView` object on which the route should be drawn + - parameter approximate: `true` if the route should be drawn using rough directions, `false` otherwise ; `false` by default but has a performance impact + - parameter strokeColor: The optional route stroke color + - parameter strokeWidth: The optional route stroke width + - returns: The resulting `GMSPolyline` object that was drawn to the map + */ + @discardableResult public func drawOnMap(_ map: GMSMapView, approximate: Bool = false, strokeColor: UIColor = UIColor.red, strokeWidth: Float = 2.0) -> GMSPolyline { + let polyline = GMSPolyline(path: (approximate ? path : detailedPath)) + polyline.strokeColor = strokeColor + polyline.strokeWidth = CGFloat(strokeWidth) + polyline.map = map + return polyline + } + + /** + Draws a marker representing the origin of the route on the specified Google Maps map view. + + - parameter map: A `GMSMapView` object on which the marker should be drawn + - parameter title: An optional marker title + - parameter color: An optional marker color + - parameter opacity: An optional marker specific opacity + - parameter flat: An optional indicator to flatten the marker + - returns: The resulting `GMSMarker` object that was drawn to the map + */ + @discardableResult public func drawOriginMarkerOnMap(_ map: GMSMapView, title: String = "", color: UIColor = UIColor.red, opacity: Float = 1.0, flat: Bool = false) -> GMSMarker? { + var marker: GMSMarker? + if let p = path { + if p.count() > 1 { + marker = drawMarkerWithCoordinates(p.coordinate(at: 0), onMap: map, title: title, color: color, opacity: opacity, flat: flat) + } + } + return marker + } + + /** + Draws a marker representing the destination of the route on the specified Google Maps map view. + + - parameter map: A `GMSMapView` object on which the marker should be drawn + - parameter title: An optional marker title + - parameter color: An optional marker color + - parameter opacity: An optional marker specific opacity + - parameter flat: An optional indicator to flatten the marker + - returns: The resulting `GMSMarker` object that was drawn to the map + */ + @discardableResult public func drawDestinationMarkerOnMap(_ map: GMSMapView, title: String = "", color: UIColor = UIColor.red, opacity: Float = 1.0, flat: Bool = false) -> GMSMarker? { + var marker: GMSMarker? + if let p = path { + if p.count() > 1 { + marker = drawMarkerWithCoordinates(p.coordinate(at: p.count() - 1), onMap: map, title: title, color: color, opacity: opacity, flat: flat) + } + } + return marker + } + + // MARK: Private functions + + fileprivate func drawMarkerWithCoordinates(_ coordinates: CLLocationCoordinate2D, onMap map: GMSMapView, title: String = "", color: UIColor = UIColor.red, opacity: Float = 1.0, flat: Bool = false) -> GMSMarker { + let marker = GMSMarker(position: coordinates) + marker.title = title + marker.icon = GMSMarker.markerImage(with: color) + marker.opacity = opacity + marker.isFlat = flat + marker.map = map + return marker + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteFare.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteFare.swift new file mode 100755 index 0000000..fe9f960 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteFare.swift @@ -0,0 +1,25 @@ +// +// PXGoogleDirectionsRouteFare.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// The total fare (that is, the total ticket costs) of a transit route +public struct PXGoogleDirectionsRouteFare { + /// An ISO 4217 currency code indicating the currency that the amount is expressed in + public var currency: String? + /// The total fare amount, in the currency specified above + public var value: Double? +} + +extension PXGoogleDirectionsRouteFare: CustomStringConvertible { + public var description: String { + let curr = (currency != nil) ? "\(currency!)" : "-" + let price = (value != nil) ? "\(value!)" : "-" + return "\(curr) \(price)" + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLeg.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLeg.swift new file mode 100644 index 0000000..f2ab646 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLeg.swift @@ -0,0 +1,53 @@ +// +// PXGoogleDirectionsRouteLeg.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import CoreLocation +import GoogleMaps + +/// A single leg of the journey from the origin to the destination in the calculated route. +public struct PXGoogleDirectionsRouteLeg: PXGoogleDirectionsSteppable { + /// Array of steps denoting information about each separate step of the leg of the journey + public var steps: [PXGoogleDirectionsRouteLegStep] = [PXGoogleDirectionsRouteLegStep]() + /// The total distance covered by this leg + public var distance: PXGoogleDirectionsDistance? + /// The total duration of this leg + public var duration: PXGoogleDirectionsDuration? + /// The total duration of this leg, taking into account current traffic conditions (the duration in traffic will only be returned if the directions request includes a departure_time parameter set to a value within a few minutes of the current time, traffic conditions are available for the requested route, and the directions request does not include stopover waypoints) + public var durationInTraffic: PXGoogleDirectionsDuration? + /// Estimated time of arrival for this leg (only available for transit directions) + public var arrivalTime: PXGoogleDirectionsTime? + /// Estimated time of departure for this leg (only available for transit directions) + public var departureTime: PXGoogleDirectionsTime? + /// Latitude/longitude coordinates of the origin of this leg (because the API calculates directions between locations by using the nearest transportation option - usually a road - at the start and end points, `startLocation` may be different than the provided origin of this leg if, for example, a road is not near the origin) + public var startLocation: CLLocationCoordinate2D? + /// Latitude/longitude coordinates of the origin of this leg (because the API calculates directions between locations by using the nearest transportation option - usually a road - at the start and end points, `endLocation` may be different than the provided destination of this leg if, for example, a road is not near the origin) + public var endLocation: CLLocationCoordinate2D? + /// Human-readable address (typically a street address) reflecting the `startLocation` of this leg + public var startAddress: String? + /// Human-readable address (typically a street address) reflecting the `endLocation` of this leg + public var endAddress: String? + /// Returns a detailed `GMSPath` object built from the legs and steps composing the route + public var detailedPath: GMSPath? { + let dp = GMSMutablePath() + for s in steps { + if let sl = s.startLocation { + dp.add(sl) + } + if let spl = s.polyline, let subpath = GMSPath(fromEncodedPath: spl) { + for i in 0 ..< subpath.count() { + dp.add(subpath.coordinate(at: i)) + } + } + if let el = s.endLocation { + dp.add(el) + } + } + return (dp.count() > 0 ? dp : nil) + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLegStep.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLegStep.swift new file mode 100644 index 0000000..ec319cd --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLegStep.swift @@ -0,0 +1,61 @@ +// +// PXGoogleDirectionsRouteLegStep.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import CoreLocation +import GoogleMaps + +/// A single step of the calculated directions. A step is the most atomic unit of a direction's route, containing a single step describing a specific, single instruction on the journey (e.g. "Turn left at W. 4th St."). The step not only describes the instruction but also contains distance and duration information relating to how this step relates to the following step. For example, a step denoted as "Merge onto I-80 West" may contain a duration of "37 miles" and "40 minutes," indicating that the next step is 37 miles/40 minutes from this step. +public class PXGoogleDirectionsRouteLegStep: NSObject, PXGoogleDirectionsSteppable { + /// Formatted instructions for this step, presented as an HTML text string + public var htmlInstructions: String? + /// Coded instructions for this step, for use in GPS or navigation-based applications + public var maneuver: String? + /// Distance covered by this step until the next step + public var distance: PXGoogleDirectionsDistance? + /// Typical time required to perform the step, until the next step + public var duration: PXGoogleDirectionsDuration? + /// Location of the starting point of this step + public var startLocation: CLLocationCoordinate2D? + /// Location of the last point of this step, + public var endLocation: CLLocationCoordinate2D? + /// Holds an encoded polyline representation of the route (this polyline is an approximate/smoothed path of the resulting directions) + public var polyline: String? + /// Detailed directions for walking or driving steps in transit directions (only available for transit mode directions) + public var steps: [PXGoogleDirectionsRouteLegStep] = [PXGoogleDirectionsRouteLegStep]() + /// Travel mode for this step (e.g. walking, transit, etc.) + public var travelMode: PXGoogleDirectionsMode? + /// Transit-specific information (only returned with transit mode directions) + public var transitDetails: PXGoogleDirectionsRouteLegStepTransitDetails? + /// Returns the corresponding `GMSPath` object associated with this route step + public var path: GMSPath? { + if let p = polyline { + return GMSPath(fromEncodedPath: p) + } else { + return nil + } + } + /// Returns the coordinate bounds for this step + public var bounds: GMSCoordinateBounds? { + var b: GMSCoordinateBounds? + if let p = path { + b = GMSCoordinateBounds(path: p) + } + return b + } + /// Raw instructions for this step, derived from the HTML instructions + public var rawInstructions: String? { + var result = htmlInstructions + if result != nil { + while let r = result!.range(of: "<[^>]+>", options: .regularExpression) { + result = result!.replacingCharacters(in: r, with: "") + } + } + return result + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLegStepTransitDetails.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLegStepTransitDetails.swift new file mode 100644 index 0000000..f0dc2c5 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsRouteLegStepTransitDetails.swift @@ -0,0 +1,29 @@ +// +// PXGoogleDirectionsRouteLegStepTransitDetails.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// Transit directions return additional information that is not relevant for other modes of transportation. From a `PXGoogleDirectionsRouteLegStepTransitDetails` object it is possible to access additional information about the transit stop, transit line and transit agency. +public struct PXGoogleDirectionsRouteLegStepTransitDetails { + /// Information about the starting station for this part of the trip + public var arrivalStop: PXGoogleDirectionsStop? + /// Information about the stop station for this part of the trip + public var departureStop: PXGoogleDirectionsStop? + /// Arrival time for this leg of the journey + public var arrivalTime: PXGoogleDirectionsTime? + /// Departure time for this leg of the journey + public var departureTime: PXGoogleDirectionsTime? + /// Direction in which to travel on this line, as it is marked on the vehicle or at the departure stop (will often be the terminus station) + public var headsign: String? + /// Expected number of seconds between departures from the same stop at this time (with a headway value of 600, a ten minute wait would be expected for someone missing his bus) + public var headway: TimeInterval? + /// Number of stops in this step, counting the arrival stop, but not the departure stop (leaving from stop A, passing through stops B and C, and arriving at stop D, `nbStops` will return 3) + public var nbStops: UInt? + /// Information about the transit line used in this step + public var line: PXGoogleDirectionsTransitLine? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsStop.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsStop.swift new file mode 100644 index 0000000..57b48c3 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsStop.swift @@ -0,0 +1,18 @@ +// +// PXGoogleDirectionsStop.swift +// PXGoogleDirections +// +// Created by Romain on 04/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import CoreLocation + +/// Information about a start/stop station for a part of a trip +public struct PXGoogleDirectionsStop { + /// The name of the transit station/stop. eg. "Union Square" + public var description: String? + /// The location of the transit station/stop + public var location: CLLocationCoordinate2D? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTime.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTime.swift new file mode 100644 index 0000000..d7a990d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTime.swift @@ -0,0 +1,27 @@ +// +// PXGoogleDirectionsTime.swift +// PXGoogleDirections +// +// Created by Romain on 06/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// Estimated time of departure or arrival for a specified route leg +public struct PXGoogleDirectionsTime { + /// The time specified as a string (displayed in the time zone of the transit stop) + public var description: String? + /// The time zone of this station + public var timeZone: TimeZone? + /// The time specified as a timestamp + public var timestamp: TimeInterval? + /// The time as a regular `NSDate` object + public var date: Date? { + if let ts = timestamp { + return Date(timeIntervalSince1970: ts) + } else { + return nil + } + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitAgency.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitAgency.swift new file mode 100644 index 0000000..921524d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitAgency.swift @@ -0,0 +1,19 @@ +// +// PXGoogleDirectionsTransitAgency.swift +// PXGoogleDirections +// +// Created by Romain on 05/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// Contains information about the operator of a transit line +public struct PXGoogleDirectionsTransitAgency { + /// The name of the transit agency + public var name: String? + /// The URL for the transit agency + public var url: URL? + /// The phone number of the transit agency + public var phone: String? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitLine.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitLine.swift new file mode 100755 index 0000000..b539e87 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitLine.swift @@ -0,0 +1,30 @@ +// +// PXGoogleDirectionsTransitLine.swift +// PXGoogleDirections +// +// Created by Romain on 05/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import UIKit + +/// Vontains information about the transit line used in a route step +public struct PXGoogleDirectionsTransitLine { + /// The full name of this transit line. eg. "7 Avenue Express" + public var name: String? + /// The short name of this transit line (normally a line number, such as "M7" or "355") + public var shortName: String? + /// The color commonly used in signage for this transit line + public var color: UIColor? + /// An array of `PXGoogleDirectionsTransitAgency` objects that each provide information about the operator of the line + public var agencies: [PXGoogleDirectionsTransitAgency] = [PXGoogleDirectionsTransitAgency]() + /// The URL for this transit line as provided by the transit agency + public var url: URL? + /// The icon associated with this line + public var icon: UIImage? + /// The color of text commonly used for signage of this line + public var textColor: UIColor? + /// The type of vehicle used on this line + public var vehicle: PXGoogleDirectionsTransitLineVehicle? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitLineVehicle.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitLineVehicle.swift new file mode 100755 index 0000000..5048766 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXGoogleDirectionsTransitLineVehicle.swift @@ -0,0 +1,20 @@ +// +// PXGoogleDirectionsTransitLineVehicle.swift +// PXGoogleDirections +// +// Created by Romain on 05/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import UIKit + +/// A type of vehicle used on a specific line +public struct PXGoogleDirectionsTransitLineVehicle { + /// The name of the vehicle on a specific line, eg. "Subway." + public var name: String? + /// The type of vehicle that runs on a specific line + public var type: PXGoogleDirectionsVehicleType? + /// An icon associated with this vehicle type + public var icon: UIImage? +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXLocation.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXLocation.swift new file mode 100755 index 0000000..f4c489a --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXLocation.swift @@ -0,0 +1,135 @@ +// +// PXLocation.swift +// PXGoogleDirections +// +// Created by Romain on 01/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import CoreLocation +import UIKit + +/// Specifies a location, either by coordinates or by name +public enum PXLocation { + /// Specifies a location by latitude and longitude coordinates + case coordinateLocation(CLLocationCoordinate2D) + /// Specifies a location by name, city and/or country + case specificLocation(String?, String?, String?) + /// Specifies a location by a single string address + case namedLocation(String) + + fileprivate var centerCoordinate: CLLocationCoordinate2D? { + switch self { + case let .coordinateLocation(loc): + return loc + default: + return nil + } + } + + /** + Returns `true` if a location is indeed specifically defined. + + - returns: `true` if the object holds a specific location, `false` otherwise + */ + public func isSpecified() -> Bool { + switch self { + case let .specificLocation(address, city, country): + return (address ?? "").characters.count > 0 || (city ?? "").characters.count > 0 || (country ?? "").characters.count > 0 + case let .namedLocation(address): + return address.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).characters.count > 0 + default: + return true + } + } + + /** + Tries to open the selected location in the Google Maps app. + + - parameter mapMode: the kind of map shown (if not specified, the current application settings will be used) + - parameter view: turns specific views on/off, multiple values can be set using a comma-separator (if the parameter is specified with no value, then it will clear all views) + - parameter zoom: specifies the zoom level of the map + - parameter callbackURL: the URL to call when complete ; often this will be a URL scheme allowing users to return to the original application + - parameter callbackName: the name of the application sending the callback request (short names are preferred) + - parameter fallbackToAppleMaps: `true` to fall back to Apple Maps in case Google Maps is not installed, `false` otherwise + - returns: `true` if opening in the Google Maps is available, `false` otherwise + */ + public func openInGoogleMaps(mapMode: PXGoogleMapsMode?, view: Set?, zoom: UInt?, callbackURL: URL?, callbackName: String?, fallbackToAppleMaps: Bool = true) -> Bool { + // Prepare the base URL parameters with provided arguments + let params = PXGoogleDirections.handleGoogleMapsURL(center: centerCoordinate, mapMode: mapMode, view: view, zoom: zoom) + // Build the Google Maps URL and open it + if let url = PXGoogleDirections.buildGoogleMapsURL(params: params, callbackURL: callbackURL, callbackName: callbackName) { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return true + } else { + // Apply fallback strategy + if fallbackToAppleMaps { + let params = PXGoogleDirections.handleAppleMapsURL(center: centerCoordinate, mapMode: mapMode, view: view, zoom: zoom) + let p = (params.count > 0) ? "?" + params.joined(separator: "&") : "" + UIApplication.shared.open(URL(string: "https://maps.apple.com/\(p)")!, options: [:], completionHandler: nil) + return true + } + } + return false + } + + /** + Tries to launch the Google Maps app and searches for the specified query. + + - parameter query: the search query string + - parameter mapMode: the kind of map shown (if not specified, the current application settings will be used) + - parameter view: turns specific views on/off, multiple values can be set using a comma-separator (if the parameter is specified with no value, then it will clear all views) + - parameter zoom: specifies the zoom level of the map + - parameter callbackURL: the URL to call when complete ; often this will be a URL scheme allowing users to return to the original application + - parameter callbackName: the name of the application sending the callback request (short names are preferred) + - parameter fallbackToAppleMaps: `true` to fall back to Apple Maps in case Google Maps is not installed, `false` otherwise + - returns: `true` if opening in the Google Maps is available, `false` otherwise + */ + public func searchInGoogleMaps(_ query: String, mapMode: PXGoogleMapsMode?, view: Set?, zoom: UInt?, callbackURL: URL?, callbackName: String?, fallbackToAppleMaps: Bool = true) -> Bool { + // Prepare the base URL parameters with provided arguments + var params = PXGoogleDirections.handleGoogleMapsURL(center: centerCoordinate, mapMode: mapMode, view: view, zoom: zoom) + // Add the query string + params.append("q=\(query.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + // Build the Google Maps URL and open it + if let url = PXGoogleDirections.buildGoogleMapsURL(params: params, callbackURL: callbackURL, callbackName: callbackName) { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return true + } else { + // Apply fallback strategy + if fallbackToAppleMaps { + var params = PXGoogleDirections.handleAppleMapsURL(center: centerCoordinate, mapMode: mapMode, view: view, zoom: zoom) + params.append("q=\(query.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + let p = (params.count > 0) ? "?" + params.joined(separator: "&") : "" + UIApplication.shared.open(URL(string: "https://maps.apple.com/\(p)")!, options: [:], completionHandler: nil) + return true + } + } + return false + } +} + +extension PXLocation: CustomStringConvertible { + public var description: String { + switch (self) { + case let .coordinateLocation(coords): + return "\(coords.latitude),\(coords.longitude)" + case let .specificLocation(name, city, country): + var locationFullName = "" + if let n = name { + locationFullName = n + } + if let c = city { + let separator = (locationFullName.lengthOfBytes(using: String.Encoding.utf8) > 0) ? "," : "" + locationFullName += "\(separator)\(c)" + } + if let c = country { + let separator = (locationFullName.lengthOfBytes(using: String.Encoding.utf8) > 0) ? "," : "" + locationFullName += "\(separator)\(c)" + } + return locationFullName + case let .namedLocation(address): + return address + } + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXTime.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXTime.swift new file mode 100644 index 0000000..3b5698d --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXTime.swift @@ -0,0 +1,52 @@ +// +// PXTime.swift +// PXGoogleDirections +// +// Created by Romain on 02/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation + +/// Specifies a departure or arrival time, either "now", or at a specific timestamp +public enum PXTime { + /// Indicates a departure time to the current time (correct to the nearest second) + case now + /// Departure or arrival time, in seconds since midnight, January 1, 1970 UTC + case timestamp(TimeInterval) + + /** + Creates an `PXTime` instance suitable for a departure or arrival time in a Google Directions API request. + + - parameter date: An `NSDate` to be used as a departure or arrival time + - returns: the `PXTime` to be used directly in a Google Directions API request + */ + public static func timeFromDate(_ date: Date) -> PXTime { + return .timestamp(date.timeIntervalSince1970) + } +} + +extension PXTime: CustomStringConvertible { + public var description: String { + switch (self) { + case .now: + return "now" + case let .timestamp(timestamp): + return "\(UInt(timestamp))" + } + } +} + +extension PXTime: Equatable { +} + +public func ==(lhs: PXTime, rhs: PXTime) -> Bool { + switch (lhs, rhs) { + case (.now, .now): + return true + case (.timestamp(let ts1), .timestamp(let ts2)): + return ts1 == ts2 + default: + return false + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXUtils.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXUtils.swift new file mode 100755 index 0000000..50a32ce --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/PXGoogleDirections/PXUtils.swift @@ -0,0 +1,56 @@ +// +// PXUtils.swift +// PXGoogleDirections +// +// Created by Romain on 06/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import Foundation +import UIKit + +public extension UIColor { + public convenience init?(hexColor: String) { + var red: CGFloat? + var green: CGFloat? + var blue: CGFloat? + var alpha: CGFloat = 1.0 + + if hexColor.hasPrefix("#") { + let index = hexColor.characters.index(hexColor.startIndex, offsetBy: 1) + let hex = hexColor.substring(from: index) + let scanner = Scanner(string: hex) + var hexValue: CUnsignedLongLong = 0 + if scanner.scanHexInt64(&hexValue) { + switch hex.lengthOfBytes(using: String.Encoding.utf8) { + case 3: + red = CGFloat((hexValue & 0xF00) >> 8) / 15.0 + green = CGFloat((hexValue & 0x0F0) >> 4) / 15.0 + blue = CGFloat(hexValue & 0x00F) / 15.0 + case 4: + red = CGFloat((hexValue & 0xF000) >> 12) / 15.0 + green = CGFloat((hexValue & 0x0F00) >> 8) / 15.0 + blue = CGFloat((hexValue & 0x00F0) >> 4) / 15.0 + alpha = CGFloat(hexValue & 0x000F) / 15.0 + case 6: + red = CGFloat((hexValue & 0xFF0000) >> 16) / 255.0 + green = CGFloat((hexValue & 0x00FF00) >> 8) / 255.0 + blue = CGFloat(hexValue & 0x0000FF) / 255.0 + case 8: + red = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0 + green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0 + blue = CGFloat((hexValue & 0x0000FF00) >> 8) / 255.0 + alpha = CGFloat(hexValue & 0x000000FF) / 255.0 + default: + break + } + } + } + if let r = red, let g = green, let b = blue { + self.init(red: r, green: g, blue: b, alpha: alpha) + } else { + self.init() + return nil + } + } +} diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Podfile b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Podfile new file mode 100755 index 0000000..b8388d5 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Podfile @@ -0,0 +1,8 @@ +source 'https://github.com/CocoaPods/Specs.git' + +platform :ios, '8.1' +use_frameworks! + +target 'PXGoogleDirections' do + pod 'GoogleMaps' +end diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/README.md b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/README.md new file mode 100644 index 0000000..0efed92 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/README.md @@ -0,0 +1,134 @@ +# PXGoogleDirections +Google Directions API SDK for iOS, entirely written in Swift. + +[![Cocoapods](https://img.shields.io/cocoapods/v/PXGoogleDirections.svg)](https://img.shields.io/cocoapods/v/PXGoogleDirections.svg) +[![Cocoapods](https://img.shields.io/cocoapods/p/PXGoogleDirections.svg)](https://img.shields.io/cocoapods/p/PXGoogleDirections.svg) +[![Cocoapods](https://img.shields.io/cocoapods/l/PXGoogleDirections.svg)](https://img.shields.io/cocoapods/l/PXGoogleDirections.svg) +![Swift](https://img.shields.io/badge/%20in-swift%203-orange.svg) + +[![CocoaPods](https://img.shields.io/cocoapods/metrics/doc-percent/PXGoogleDirections.svg?style=plastic)]() +[![CocoaPods](https://img.shields.io/cocoapods/at/PXGoogleDirections.svg?style=plastic)]() +[![CocoaPods](https://img.shields.io/cocoapods/aw/PXGoogleDirections.svg?style=plastic)]() + +[![GitHub stars](https://img.shields.io/github/stars/poulpix/PXGoogleDirections.svg?style=social&label=Star&style=plastic)]() +[![GitHub forks](https://img.shields.io/github/forks/poulpix/PXGoogleDirections.svg?style=social&label=Fork&style=plastic)]() +[![GitHub watchers](https://img.shields.io/github/watchers/poulpix/PXGoogleDirections.svg?style=social&label=Watch&style=plastic)]() +[![Twitter Follow](https://img.shields.io/twitter/follow/_RomainL.svg?style=social&label=Follow&style=plastic)]() + +## Features +- Supports all features from the Google Directions API as of November 2016 (see here for a full list: https://developers.google.com/maps/documentation/directions) +- Supports "open in Google Maps app", both for specific locations and directions request + * also supports the callback feature to get the user back to your app when he's done in Google Maps + * in case the Google Maps app is not installed, also supports fallback to the built-in Apple Maps app +- Available both with modern, Swift-style completion blocks, or Objective-C-style delegation patterns +- Queries are made over HTTPS +- JSON is used behind the scenes to help reduce the size of the responses +- Available through CocoaPods +- V1.3 is fully compatible with Swift 3 and Google Maps iOS SDK V2+ + +## New in V1.3 +- Full Swift 3 support +- Full Google Maps iOS SDK 2.0+ support +- Added a `trafficModel` property on the `PXGoogleDirections` class to match Google's one in the API (recently added); it works only for driving routes, and when a departure date is specified +- Fixed a bug where drawing a route would only draw a basic, rough representation of it taken from the route object; now there is an option for drawing a detailed route in the `drawOnMap` method of the `PXGoogleDirectionsRoute` class +- Other small bug fixes + +## Installation +### From Cocoapods +To use PXGoogleDirections in your project add the following 'Podfile' to your project: + +``` +source 'https://github.com/CocoaPods/Specs.git' + +platform :ios, '8.1' + +pod 'PXGoogleDirections' + +use_frameworks! +``` + +Then run the following command from the Terminal: + +```bash +pod install +``` + +Now, from your code, you should be able to simply import the module like this: + +```swift +import PXGoogleDirections +``` + +> You might run into issues if you mix up PXGoogleDirections with the Google Maps iOS SDK in your app. If you do so, please check the "In case of problems" paragraph below, and do not hesitate to contact me and describe your issue if you require assistance! + +### From source +- Clone the repository +- Add the whole `PXGoogleDirections` project to your own Xcode project +- Add a dependency between the two projects and build + +## Usage +Quick-start in two lines of Swift code: + +1) Create an API object: +```swift +let directionsAPI = PXGoogleDirections(apiKey: "", + from: PXLocation.CoordinateLocation(CLLocationCoordinate2DMake(37.331690, -122.030762)), + to: PXLocation.SpecificLocation("Googleplex", "Mountain View", "United States")) +``` +2) Run the Directions request: +```swift +directionsAPI.calculateDirections({ response in + switch response { + case let .error(_, error): + // Oops, something bad happened, see the error object for more information + break + case let .success(request, routes): + // Do your work with the routes object array here + break + } +}) +``` + +See "Documentation" below for more information on the available properties and response data. + +## Requirements +- Runs on iOS 8.1 at least, or above. +- Compatible with Swift 3 / Xcode 8 and later. + - Please use v1.2.3 if you need compatibility with a previous version of Swift. +- The SDK depends on the official Google Maps SDK for iOS (more information here: [Google Maps iOS SDK](https://developers.google.com/maps/documentation/ios/)) + +## Documentation +The SDK provides an integrated documentation within Xcode, with full autocomplete support. + +To help getting you started, a sample project is also available in the "Sample" subfolder of this repository. + +It is designed to demo the main features of both the API and the SDK. + + + +## In case of problems +Since V1.3, PXGoogleDirections uses Google's latest branch of Google Maps iOS SDK, which has now been split into smaller, more modular frameworks. PXGoogleDirections has a dependency with three of them: +- `GoogleMapsCore` +- `GoogleMapsBase` +- `GoogleMaps` + +> The Google Places iOS SDK is not required. + +If your app *also* requires the Google Maps iOS SDK, you might run into troubles because of conflicts with the bundled Google Maps iOS SDK in the Cocoapod. Providing Cocoapods frameworks with static framework dependencies like Google Maps is a real pain and there is no simple, straightforward solution I'm aware of, unfortunately. + +If you happen to face these problems, please try to do the following: +- Add `-framework "GoogleMapsBase" -framework "GoogleMapsCore" -framework "GoogleMaps"` to the "Other Linker Flags" of your Xcode project. +- Make sure you are linking your app with all the libraries and frameworks required by the Google Maps iOS SDK. For a full list, see here: https://github.com/CocoaPods/Specs/blob/master/Specs/a/d/d/GoogleMaps/2.1.1/GoogleMaps.podspec.json + +## Credit +- Some portions of code inspired by OpenInGoogleMaps-iOS (https://github.com/googlemaps/OpenInGoogleMaps-iOS) from the Google Maps team. + +## License +The PXGoogleDirections SDK is licensed under the New BSD license. (see LICENSE for more information.) + +## Contact +Don't hesitate to drop me a line on Github, Twitter, Stack Overflow, or by email: +- https://github.com/poulpix +- https://twitter.com/_RomainL +- http://stackoverflow.com/users/145997/romain +- dev (dot) romain (at) me.com diff --git a/Sample/Icon.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Icon.png similarity index 100% rename from Sample/Icon.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Icon.png diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Mockup1.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Mockup1.png new file mode 100644 index 0000000..53d1d69 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Mockup1.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Mockup2.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Mockup2.png new file mode 100644 index 0000000..8f18832 Binary files /dev/null and b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Mockup2.png differ diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcodeproj/project.pbxproj b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c5990b5 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcodeproj/project.pbxproj @@ -0,0 +1,487 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 60F60723972D55A758157C1A /* Pods_PXGoogleDirectionsSample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3225BF5079705D45C0D54DDE /* Pods_PXGoogleDirectionsSample.framework */; }; + 7AC08E901D300D6700F06B44 /* GoogleAPIKeyProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC08E8F1D300D6700F06B44 /* GoogleAPIKeyProvider.swift */; }; + 7AC37A3B1DDC397200E03E4E /* GoogleMaps.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC37A381DDC397200E03E4E /* GoogleMaps.framework */; }; + 7AC37A3C1DDC397200E03E4E /* GoogleMapsBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC37A391DDC397200E03E4E /* GoogleMapsBase.framework */; }; + 7AC37A3D1DDC397200E03E4E /* GoogleMapsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC37A3A1DDC397200E03E4E /* GoogleMapsCore.framework */; }; + 7AC68B621D300D0400B81C70 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC68B611D300D0400B81C70 /* AppDelegate.swift */; }; + 7AC68B671D300D0400B81C70 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7AC68B651D300D0400B81C70 /* Main.storyboard */; }; + 7AC68B691D300D0400B81C70 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7AC68B681D300D0400B81C70 /* Assets.xcassets */; }; + 7ACF3E991D427CCF00830BD6 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E981D427CCF00830BD6 /* CoreText.framework */; }; + 7ACF3E9B1D427CD400830BD6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9A1D427CD400830BD6 /* CoreGraphics.framework */; }; + 7ACF3EAA1D427D1F00830BD6 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9C1D427D1F00830BD6 /* Accelerate.framework */; }; + 7ACF3EAB1D427D1F00830BD6 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9D1D427D1F00830BD6 /* AVFoundation.framework */; }; + 7ACF3EAC1D427D1F00830BD6 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9E1D427D1F00830BD6 /* CoreBluetooth.framework */; }; + 7ACF3EAD1D427D1F00830BD6 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9F1D427D1F00830BD6 /* CoreData.framework */; }; + 7ACF3EAE1D427D1F00830BD6 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA01D427D1F00830BD6 /* CoreLocation.framework */; }; + 7ACF3EAF1D427D1F00830BD6 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA11D427D1F00830BD6 /* GLKit.framework */; }; + 7ACF3EB01D427D1F00830BD6 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA21D427D1F00830BD6 /* ImageIO.framework */; }; + 7ACF3EB11D427D1F00830BD6 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA31D427D1F00830BD6 /* libc++.tbd */; }; + 7ACF3EB21D427D1F00830BD6 /* libicucore.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA41D427D1F00830BD6 /* libicucore.tbd */; }; + 7ACF3EB31D427D1F00830BD6 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA51D427D1F00830BD6 /* libz.tbd */; }; + 7ACF3EB41D427D1F00830BD6 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA61D427D1F00830BD6 /* OpenGLES.framework */; }; + 7ACF3EB51D427D1F00830BD6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA71D427D1F00830BD6 /* QuartzCore.framework */; }; + 7ACF3EB61D427D1F00830BD6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA81D427D1F00830BD6 /* Security.framework */; }; + 7ACF3EB71D427D1F00830BD6 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA91D427D1F00830BD6 /* SystemConfiguration.framework */; }; + 7ACF3EBB1D427D7300830BD6 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACF3EB81D427D7300830BD6 /* MainViewController.swift */; }; + 7ACF3EBC1D427D7300830BD6 /* ResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACF3EB91D427D7300830BD6 /* ResultsViewController.swift */; }; + 7ACF3EBD1D427D7300830BD6 /* WaypointViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACF3EBA1D427D7300830BD6 /* WaypointViewController.swift */; }; + 7ACF3EC01D427DA100830BD6 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF3EBE1D427DA100830BD6 /* LaunchScreen.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3225BF5079705D45C0D54DDE /* Pods_PXGoogleDirectionsSample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PXGoogleDirectionsSample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AC08E8F1D300D6700F06B44 /* GoogleAPIKeyProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GoogleAPIKeyProvider.swift; path = Private/GoogleAPIKeyProvider.swift; sourceTree = SOURCE_ROOT; }; + 7AC37A381DDC397200E03E4E /* GoogleMaps.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMaps.framework; path = Pods/PXGoogleDirections/Dependencies/GoogleMaps.framework; sourceTree = ""; }; + 7AC37A391DDC397200E03E4E /* GoogleMapsBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMapsBase.framework; path = Pods/PXGoogleDirections/Dependencies/GoogleMapsBase.framework; sourceTree = ""; }; + 7AC37A3A1DDC397200E03E4E /* GoogleMapsCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMapsCore.framework; path = Pods/PXGoogleDirections/Dependencies/GoogleMapsCore.framework; sourceTree = ""; }; + 7AC68B5E1D300D0300B81C70 /* PXGoogleDirectionsSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PXGoogleDirectionsSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AC68B611D300D0400B81C70 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AC68B661D300D0400B81C70 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 7AC68B681D300D0400B81C70 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 7AC68B6D1D300D0400B81C70 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7ACF3E981D427CCF00830BD6 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + 7ACF3E9A1D427CD400830BD6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 7ACF3E9C1D427D1F00830BD6 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 7ACF3E9D1D427D1F00830BD6 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 7ACF3E9E1D427D1F00830BD6 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; + 7ACF3E9F1D427D1F00830BD6 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 7ACF3EA01D427D1F00830BD6 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 7ACF3EA11D427D1F00830BD6 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; + 7ACF3EA21D427D1F00830BD6 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; + 7ACF3EA31D427D1F00830BD6 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 7ACF3EA41D427D1F00830BD6 /* libicucore.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libicucore.tbd; path = usr/lib/libicucore.tbd; sourceTree = SDKROOT; }; + 7ACF3EA51D427D1F00830BD6 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 7ACF3EA61D427D1F00830BD6 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + 7ACF3EA71D427D1F00830BD6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 7ACF3EA81D427D1F00830BD6 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 7ACF3EA91D427D1F00830BD6 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 7ACF3EB81D427D7300830BD6 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; + 7ACF3EB91D427D7300830BD6 /* ResultsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultsViewController.swift; sourceTree = ""; }; + 7ACF3EBA1D427D7300830BD6 /* WaypointViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WaypointViewController.swift; sourceTree = ""; }; + 7ACF3EBF1D427DA100830BD6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + B83B08D12A009BB6BA8E12AD /* Pods-PXGoogleDirectionsSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PXGoogleDirectionsSample.release.xcconfig"; path = "Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample.release.xcconfig"; sourceTree = ""; }; + F97416A2E425D03A322EC705 /* Pods-PXGoogleDirectionsSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PXGoogleDirectionsSample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7AC68B5B1D300D0300B81C70 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AC37A3B1DDC397200E03E4E /* GoogleMaps.framework in Frameworks */, + 7AC37A3C1DDC397200E03E4E /* GoogleMapsBase.framework in Frameworks */, + 7AC37A3D1DDC397200E03E4E /* GoogleMapsCore.framework in Frameworks */, + 7ACF3EAA1D427D1F00830BD6 /* Accelerate.framework in Frameworks */, + 7ACF3EAB1D427D1F00830BD6 /* AVFoundation.framework in Frameworks */, + 7ACF3EAC1D427D1F00830BD6 /* CoreBluetooth.framework in Frameworks */, + 7ACF3EAD1D427D1F00830BD6 /* CoreData.framework in Frameworks */, + 7ACF3EAE1D427D1F00830BD6 /* CoreLocation.framework in Frameworks */, + 7ACF3EAF1D427D1F00830BD6 /* GLKit.framework in Frameworks */, + 7ACF3EB01D427D1F00830BD6 /* ImageIO.framework in Frameworks */, + 7ACF3EB11D427D1F00830BD6 /* libc++.tbd in Frameworks */, + 7ACF3EB21D427D1F00830BD6 /* libicucore.tbd in Frameworks */, + 7ACF3EB31D427D1F00830BD6 /* libz.tbd in Frameworks */, + 7ACF3EB41D427D1F00830BD6 /* OpenGLES.framework in Frameworks */, + 7ACF3EB51D427D1F00830BD6 /* QuartzCore.framework in Frameworks */, + 7ACF3EB61D427D1F00830BD6 /* Security.framework in Frameworks */, + 7ACF3EB71D427D1F00830BD6 /* SystemConfiguration.framework in Frameworks */, + 7ACF3E9B1D427CD400830BD6 /* CoreGraphics.framework in Frameworks */, + 7ACF3E991D427CCF00830BD6 /* CoreText.framework in Frameworks */, + 60F60723972D55A758157C1A /* Pods_PXGoogleDirectionsSample.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7AC68B551D300D0300B81C70 = { + isa = PBXGroup; + children = ( + 7AC68B601D300D0400B81C70 /* PXGoogleDirectionsSample */, + 7AC68B5F1D300D0300B81C70 /* Products */, + ED35EE3D383D3489F3198806 /* Pods */, + E606A026ADB2A38A37373483 /* Frameworks */, + ); + sourceTree = ""; + }; + 7AC68B5F1D300D0300B81C70 /* Products */ = { + isa = PBXGroup; + children = ( + 7AC68B5E1D300D0300B81C70 /* PXGoogleDirectionsSample.app */, + ); + name = Products; + sourceTree = ""; + }; + 7AC68B601D300D0400B81C70 /* PXGoogleDirectionsSample */ = { + isa = PBXGroup; + children = ( + 7AC68B611D300D0400B81C70 /* AppDelegate.swift */, + 7AC08E8F1D300D6700F06B44 /* GoogleAPIKeyProvider.swift */, + 7ACF3EB81D427D7300830BD6 /* MainViewController.swift */, + 7ACF3EB91D427D7300830BD6 /* ResultsViewController.swift */, + 7ACF3EBA1D427D7300830BD6 /* WaypointViewController.swift */, + 7ACF3EBE1D427DA100830BD6 /* LaunchScreen.xib */, + 7AC68B651D300D0400B81C70 /* Main.storyboard */, + 7AC68B681D300D0400B81C70 /* Assets.xcassets */, + 7AC68B6D1D300D0400B81C70 /* Info.plist */, + ); + path = PXGoogleDirectionsSample; + sourceTree = ""; + }; + E606A026ADB2A38A37373483 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7AC37A381DDC397200E03E4E /* GoogleMaps.framework */, + 7AC37A391DDC397200E03E4E /* GoogleMapsBase.framework */, + 7AC37A3A1DDC397200E03E4E /* GoogleMapsCore.framework */, + 7ACF3E9C1D427D1F00830BD6 /* Accelerate.framework */, + 7ACF3E9D1D427D1F00830BD6 /* AVFoundation.framework */, + 7ACF3E9E1D427D1F00830BD6 /* CoreBluetooth.framework */, + 7ACF3E9F1D427D1F00830BD6 /* CoreData.framework */, + 7ACF3EA01D427D1F00830BD6 /* CoreLocation.framework */, + 7ACF3EA11D427D1F00830BD6 /* GLKit.framework */, + 7ACF3EA21D427D1F00830BD6 /* ImageIO.framework */, + 7ACF3EA31D427D1F00830BD6 /* libc++.tbd */, + 7ACF3EA41D427D1F00830BD6 /* libicucore.tbd */, + 7ACF3EA51D427D1F00830BD6 /* libz.tbd */, + 7ACF3EA61D427D1F00830BD6 /* OpenGLES.framework */, + 7ACF3EA71D427D1F00830BD6 /* QuartzCore.framework */, + 7ACF3EA81D427D1F00830BD6 /* Security.framework */, + 7ACF3EA91D427D1F00830BD6 /* SystemConfiguration.framework */, + 7ACF3E9A1D427CD400830BD6 /* CoreGraphics.framework */, + 7ACF3E981D427CCF00830BD6 /* CoreText.framework */, + 3225BF5079705D45C0D54DDE /* Pods_PXGoogleDirectionsSample.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + ED35EE3D383D3489F3198806 /* Pods */ = { + isa = PBXGroup; + children = ( + F97416A2E425D03A322EC705 /* Pods-PXGoogleDirectionsSample.debug.xcconfig */, + B83B08D12A009BB6BA8E12AD /* Pods-PXGoogleDirectionsSample.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7AC68B5D1D300D0300B81C70 /* PXGoogleDirectionsSample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7AC68B701D300D0400B81C70 /* Build configuration list for PBXNativeTarget "PXGoogleDirectionsSample" */; + buildPhases = ( + 7BD204DEC9C1B9C572EA1A73 /* [CP] Check Pods Manifest.lock */, + 7AC68B5A1D300D0300B81C70 /* Sources */, + 7AC68B5B1D300D0300B81C70 /* Frameworks */, + 7AC68B5C1D300D0300B81C70 /* Resources */, + 295018C93D0F212C41A0F980 /* [CP] Embed Pods Frameworks */, + DB3204A5C84EC3A7A17CAFE8 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PXGoogleDirectionsSample; + productName = PXGoogleDirectionsSample; + productReference = 7AC68B5E1D300D0300B81C70 /* PXGoogleDirectionsSample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7AC68B561D300D0300B81C70 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0810; + ORGANIZATIONNAME = RLT; + TargetAttributes = { + 7AC68B5D1D300D0300B81C70 = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0810; + }; + }; + }; + buildConfigurationList = 7AC68B591D300D0300B81C70 /* Build configuration list for PBXProject "PXGoogleDirectionsSample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7AC68B551D300D0300B81C70; + productRefGroup = 7AC68B5F1D300D0300B81C70 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7AC68B5D1D300D0300B81C70 /* PXGoogleDirectionsSample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7AC68B5C1D300D0300B81C70 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7ACF3EC01D427DA100830BD6 /* LaunchScreen.xib in Resources */, + 7AC68B691D300D0400B81C70 /* Assets.xcassets in Resources */, + 7AC68B671D300D0400B81C70 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 295018C93D0F212C41A0F980 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7BD204DEC9C1B9C572EA1A73 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + DB3204A5C84EC3A7A17CAFE8 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7AC68B5A1D300D0300B81C70 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AC08E901D300D6700F06B44 /* GoogleAPIKeyProvider.swift in Sources */, + 7AC68B621D300D0400B81C70 /* AppDelegate.swift in Sources */, + 7ACF3EBC1D427D7300830BD6 /* ResultsViewController.swift in Sources */, + 7ACF3EBB1D427D7300830BD6 /* MainViewController.swift in Sources */, + 7ACF3EBD1D427D7300830BD6 /* WaypointViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 7AC68B651D300D0400B81C70 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 7AC68B661D300D0400B81C70 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 7ACF3EBE1D427DA100830BD6 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 7ACF3EBF1D427DA100830BD6 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 7AC68B6E1D300D0400B81C70 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7AC68B6F1D300D0400B81C70 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7AC68B711D300D0400B81C70 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97416A2E425D03A322EC705 /* Pods-PXGoogleDirectionsSample.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(PROJECT_DIR)/Pods/PXGoogleDirections/Dependencies", + ); + INFOPLIST_FILE = PXGoogleDirectionsSample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Poulpix.PXGoogleDirectionsSample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 7AC68B721D300D0400B81C70 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B83B08D12A009BB6BA8E12AD /* Pods-PXGoogleDirectionsSample.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(PROJECT_DIR)/Pods/PXGoogleDirections/Dependencies", + ); + INFOPLIST_FILE = PXGoogleDirectionsSample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Poulpix.PXGoogleDirectionsSample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7AC68B591D300D0300B81C70 /* Build configuration list for PBXProject "PXGoogleDirectionsSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7AC68B6E1D300D0400B81C70 /* Debug */, + 7AC68B6F1D300D0400B81C70 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7AC68B701D300D0400B81C70 /* Build configuration list for PBXNativeTarget "PXGoogleDirectionsSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7AC68B711D300D0400B81C70 /* Debug */, + 7AC68B721D300D0400B81C70 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7AC68B561D300D0300B81C70 /* Project object */; +} diff --git a/Sample/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Sample/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Sample/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Sample/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/AppDelegate.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/AppDelegate.swift new file mode 100644 index 0000000..98a7cdb --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/AppDelegate.swift @@ -0,0 +1,27 @@ +// +// AppDelegate.swift +// PXGoogleDirectionsSample +// +// Created by Romain on 08/03/2015. +// Copyright (c) 2015 Poulpix. All rights reserved. +// + +import UIKit +import PXGoogleDirections +import GoogleMaps + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + var directionsAPI: PXGoogleDirections! + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + UISegmentedControl.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Avenir Next", size: 15.0)!], for: UIControlState()) + // TODO: For you fellow developer: replace `getGoogleAPI{Client|Server}Key()` in the two lines below with a string containing your own Google Maps API keys! + GMSServices.provideAPIKey(getGoogleAPIClientKey()) // A valid iOS client-side API key tied to your application's bundle identifier is required here + directionsAPI = PXGoogleDirections(apiKey: getGoogleAPIServerKey()) // A valid server-side API key is required here + + return true + } +} diff --git a/Sample/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib similarity index 100% rename from Sample/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib diff --git a/Sample/PXGoogleDirectionsSample/Base.lproj/Main.storyboard b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Base.lproj/Main.storyboard similarity index 100% rename from Sample/PXGoogleDirectionsSample/Base.lproj/Main.storyboard rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Base.lproj/Main.storyboard diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Contents.json b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Contents.json similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Contents.json rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Contents.json diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png diff --git a/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png similarity index 100% rename from Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png diff --git a/Sample/PXGoogleDirectionsSample/Info.plist b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Info.plist similarity index 100% rename from Sample/PXGoogleDirectionsSample/Info.plist rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/Info.plist diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/MainViewController.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/MainViewController.swift new file mode 100644 index 0000000..ed17b35 --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/MainViewController.swift @@ -0,0 +1,281 @@ +// +// ViewController.swift +// RLGoogleDirectionsSample +// +// Created by Romain on 07/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import UIKit +import CoreLocation +import PXGoogleDirections +import GoogleMaps + +protocol MainViewControllerDelegate { + func didAddWaypoint(_ waypoint: PXLocation) +} + +class MainViewController: UIViewController { + @IBOutlet weak var originField: UITextField! + @IBOutlet weak var destinationField: UITextField! + @IBOutlet weak var modeField: UISegmentedControl! + @IBOutlet weak var advancedSwitch: UISwitch! + @IBOutlet weak var advancedView: UIView! + @IBOutlet weak var unitField: UISegmentedControl! + @IBOutlet weak var transitRoutingField: UISegmentedControl! + @IBOutlet weak var trafficModelField: UISegmentedControl! + @IBOutlet weak var alternativeSwitch: UISwitch! + @IBOutlet weak var busSwitch: UISwitch! + @IBOutlet weak var subwaySwitch: UISwitch! + @IBOutlet weak var trainSwitch: UISwitch! + @IBOutlet weak var tramSwitch: UISwitch! + @IBOutlet weak var railSwitch: UISwitch! + @IBOutlet weak var avoidTollsSwitch: UISwitch! + @IBOutlet weak var avoidHighwaysSwitch: UISwitch! + @IBOutlet weak var avoidFerriesSwitch: UISwitch! + @IBOutlet weak var startArriveField: UISegmentedControl! + @IBOutlet weak var startArriveDateField: UITextField! + @IBOutlet weak var waypointsLabel: UILabel! + @IBOutlet weak var optimizeWaypointsSwitch: UISwitch! + @IBOutlet weak var languageField: UISegmentedControl! + var startArriveDate: Date? + var waypoints: [PXLocation] = [PXLocation]() + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + updateStartArriveDateField(nil) + updateWaypointsField() + let datePicker = UIDatePicker() + datePicker.sizeToFit() + datePicker.autoresizingMask = [.flexibleWidth, .flexibleHeight] + datePicker.datePickerMode = .dateAndTime + datePicker.minuteInterval = 5 + startArriveDateField.inputView = datePicker + let keyboardDoneButtonView = UIToolbar() + keyboardDoneButtonView.barStyle = .black + keyboardDoneButtonView.isTranslucent = true + keyboardDoneButtonView.tintColor = nil + keyboardDoneButtonView.sizeToFit() + let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(MainViewController.doneButtonTouched(_:))) + let clearButton = UIBarButtonItem(title: "Clear", style: .plain, target: self, action: #selector(MainViewController.clearButtonTouched(_:))) + keyboardDoneButtonView.setItems([doneButton, clearButton], animated: false) + startArriveDateField.inputAccessoryView = keyboardDoneButtonView + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + + fileprivate var directionsAPI: PXGoogleDirections { + return (UIApplication.shared.delegate as! AppDelegate).directionsAPI + } + + fileprivate func modeFromField() -> PXGoogleDirectionsMode { + return PXGoogleDirectionsMode(rawValue: modeField.selectedSegmentIndex)! + } + + fileprivate func unitFromField() -> PXGoogleDirectionsUnit { + return PXGoogleDirectionsUnit(rawValue: unitField.selectedSegmentIndex)! + } + + fileprivate func transitRoutingPreferenceFromField() -> PXGoogleDirectionsTransitRoutingPreference? { + return PXGoogleDirectionsTransitRoutingPreference(rawValue: transitRoutingField.selectedSegmentIndex) + } + + fileprivate func trafficModelFromField() -> PXGoogleDirectionsTrafficModel? { + return PXGoogleDirectionsTrafficModel(rawValue: trafficModelField.selectedSegmentIndex) + } + + fileprivate func languageFromField() -> String { + return languageField.titleForSegment(at: languageField.selectedSegmentIndex)! + // There are quite a few other languages available, see here for more information: https://developers.google.com/maps/faq#languagesupport + } + + fileprivate func updateStartArriveDateField(_ newDate: Date?) { + startArriveDate = newDate + if let saDate = startArriveDate { + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .medium + dateFormatter.timeStyle = .short + startArriveDateField.text = dateFormatter.string(from: saDate) + } else { + startArriveDateField.text = "" + } + } + + fileprivate func updateWaypointsField() { + switch (waypoints).count { + case 0: + waypointsLabel.text = "No waypoints" + case 1: + waypointsLabel.text = "1 waypoint" + default: + waypointsLabel.text = "\((waypoints).count) waypoints" + } + } + + @IBAction func advancedOptionsChanged(_ sender: UISwitch) { + UIView.animate(withDuration: 0.5, animations: { + self.advancedView.alpha = (self.advancedSwitch.isOn ? 1.0 : 0.0) + }) + } + + @IBAction func selectDateButtonTouched(_ sender: UIButton) { + startArriveDateField.isEnabled = true + startArriveDateField.becomeFirstResponder() + } + + func doneButtonTouched(_ sender: UIBarButtonItem) { + updateStartArriveDateField((startArriveDateField.inputView as! UIDatePicker).date) + startArriveDateField.resignFirstResponder() + startArriveDateField.isEnabled = false + } + + func clearButtonTouched(_ sender: UIBarButtonItem) { + updateStartArriveDateField(nil) + startArriveDateField.resignFirstResponder() + startArriveDateField.isEnabled = false + } + + @IBAction func addWaypointButtonTouched(_ sender: UIButton) { + if let wpvc = self.storyboard?.instantiateViewController(withIdentifier: "Waypoint") as? WaypointViewController { + wpvc.delegate = self + self.present(wpvc, animated: true, completion: nil) + } + } + + @IBAction func clearWaypointsButtonTouched(_ sender: UIButton) { + waypoints.removeAll(keepingCapacity: false) + updateWaypointsField() + } + + @IBAction func goButtonTouched(_ sender: UIButton) { + directionsAPI.delegate = self + directionsAPI.from = PXLocation.namedLocation(originField.text!) + directionsAPI.to = PXLocation.namedLocation(destinationField.text!) + directionsAPI.mode = modeFromField() + if advancedSwitch.isOn { + directionsAPI.transitRoutingPreference = transitRoutingPreferenceFromField() + directionsAPI.trafficModel = trafficModelFromField() + directionsAPI.units = unitFromField() + directionsAPI.alternatives = alternativeSwitch.isOn + directionsAPI.transitModes = Set() + if busSwitch.isOn { + directionsAPI.transitModes.insert(.bus) + } + if subwaySwitch.isOn { + directionsAPI.transitModes.insert(.subway) + } + if trainSwitch.isOn { + directionsAPI.transitModes.insert(.train) + } + if tramSwitch.isOn { + directionsAPI.transitModes.insert(.tram) + } + if railSwitch.isOn { + directionsAPI.transitModes.insert(.rail) + } + directionsAPI.featuresToAvoid = Set() + if avoidTollsSwitch.isOn { + directionsAPI.featuresToAvoid.insert(.tolls) + } + if avoidHighwaysSwitch.isOn { + directionsAPI.featuresToAvoid.insert(.highways) + } + if avoidFerriesSwitch.isOn { + directionsAPI.featuresToAvoid.insert(.ferries) + } + switch startArriveField.selectedSegmentIndex { + case 0: + directionsAPI.departureTime = .now + directionsAPI.arrivalTime = nil + case 1: + if let saDate = startArriveDate { + directionsAPI.departureTime = PXTime.timeFromDate(saDate) + directionsAPI.arrivalTime = nil + } else { + return + } + case 2: + if let saDate = startArriveDate { + directionsAPI.departureTime = nil + directionsAPI.arrivalTime = PXTime.timeFromDate(saDate) + } else { + return + } + default: + break + } + directionsAPI.waypoints = waypoints + directionsAPI.optimizeWaypoints = optimizeWaypointsSwitch.isOn + directionsAPI.language = languageFromField() + } else { + directionsAPI.transitRoutingPreference = nil + directionsAPI.trafficModel = nil + directionsAPI.units = nil + directionsAPI.alternatives = nil + directionsAPI.transitModes = Set() + directionsAPI.featuresToAvoid = Set() + directionsAPI.departureTime = nil + directionsAPI.arrivalTime = nil + directionsAPI.waypoints = [PXLocation]() + directionsAPI.optimizeWaypoints = nil + directionsAPI.language = nil + } + // directionsAPI.region = "fr" // Feature not demonstrated in this sample app + directionsAPI.calculateDirections { (response) -> Void in + DispatchQueue.main.async(execute: { () -> Void in + switch response { + case let .error(_, error): + let alert = UIAlertController(title: "PXGoogleDirectionsSample", message: "Error: \(error.localizedDescription)", preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true, completion: nil) + case let .success(request, routes): + if let rvc = self.storyboard?.instantiateViewController(withIdentifier: "Results") as? ResultsViewController { + rvc.request = request + rvc.results = routes + self.present(rvc, animated: true, completion: nil) + } + } + }) + } + } +} + +extension MainViewController: PXGoogleDirectionsDelegate { + func googleDirectionsWillSendRequestToAPI(_ googleDirections: PXGoogleDirections, withURL requestURL: URL) -> Bool { + NSLog("googleDirectionsWillSendRequestToAPI:withURL:") + return true + } + + func googleDirectionsDidSendRequestToAPI(_ googleDirections: PXGoogleDirections, withURL requestURL: URL) { + NSLog("googleDirectionsDidSendRequestToAPI:withURL:") + NSLog("\(requestURL.absoluteString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + } + + func googleDirections(_ googleDirections: PXGoogleDirections, didReceiveRawDataFromAPI data: Data) { + NSLog("googleDirections:didReceiveRawDataFromAPI:") + NSLog(NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String) + } + + func googleDirectionsRequestDidFail(_ googleDirections: PXGoogleDirections, withError error: NSError) { + NSLog("googleDirectionsRequestDidFail:withError:") + NSLog("\(error)") + } + + func googleDirections(_ googleDirections: PXGoogleDirections, didReceiveResponseFromAPI apiResponse: [PXGoogleDirectionsRoute]) { + NSLog("googleDirections:didReceiveResponseFromAPI:") + NSLog("Got \(apiResponse.count) routes") + for i in 0 ..< apiResponse.count { + NSLog("Route \(i) has \(apiResponse[i].legs.count) legs") + } + } +} + +extension MainViewController: MainViewControllerDelegate { + func didAddWaypoint(_ waypoint: PXLocation) { + waypoints.append(waypoint) + updateWaypointsField() + } +} diff --git a/Sample/PXGoogleDirectionsSample/ResultsViewController.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/ResultsViewController.swift similarity index 100% rename from Sample/PXGoogleDirectionsSample/ResultsViewController.swift rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/ResultsViewController.swift diff --git a/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/WaypointViewController.swift b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/WaypointViewController.swift new file mode 100644 index 0000000..29cee3f --- /dev/null +++ b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/PXGoogleDirectionsSample/WaypointViewController.swift @@ -0,0 +1,57 @@ +// +// WaypointViewController.swift +// PXGoogleDirectionsSample +// +// Created by Romain on 27/03/2015. +// Copyright (c) 2015 Poulpix. All rights reserved. +// + +import UIKit +import CoreLocation +import PXGoogleDirections + +class WaypointViewController: UIViewController { + @IBOutlet weak var namedLocationView: UIView! + @IBOutlet weak var coordinateLocationView: UIView! + @IBOutlet weak var namedLocationField: UITextField! + @IBOutlet weak var latitudeField: UITextField! + @IBOutlet weak var longitudeField: UITextField! + var delegate: MainViewControllerDelegate! + + @IBAction func cancelButtonTouched(_ sender: UIButton) { + dismiss(animated: true, completion: nil) + } + + @IBAction func locationTypeChanged(_ sender: UISegmentedControl) { + switch sender.selectedSegmentIndex { + case 0: + namedLocationView.isHidden = false + coordinateLocationView.isHidden = true + case 1: + namedLocationView.isHidden = true + coordinateLocationView.isHidden = false + default: + break + } + } + + @IBAction func addWaypointButtonTouched(_ sender: UIButton) { + var waypoint: PXLocation? + if !namedLocationView.isHidden { + if namedLocationField.text!.characters.count > 0 { + waypoint = PXLocation.namedLocation(namedLocationField.text!) + } + } + if !coordinateLocationView.isHidden { + if latitudeField.text!.characters.count > 0 && longitudeField.text!.characters.count > 0 { + let lat = NSString(string: latitudeField.text!).doubleValue + let lng = NSString(string: longitudeField.text!).doubleValue + waypoint = PXLocation.coordinateLocation(CLLocationCoordinate2DMake(lat, lng)) + } + } + if let wp = waypoint { + delegate.didAddWaypoint(wp) + dismiss(animated: true, completion: nil) + } + } +} diff --git a/Sample/Podfile b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Podfile similarity index 100% rename from Sample/Podfile rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/Podfile diff --git a/Sample/SampleScreen1.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/SampleScreen1.png similarity index 100% rename from Sample/SampleScreen1.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/SampleScreen1.png diff --git a/Sample/SampleScreen2.png b/Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/SampleScreen2.png similarity index 100% rename from Sample/SampleScreen2.png rename to Sample-Carthage/Carthage/Checkouts/PXGoogleDirections/Sample/SampleScreen2.png diff --git a/Sample-Carthage/Icon.png b/Sample-Carthage/Icon.png new file mode 100644 index 0000000..d94b4f0 Binary files /dev/null and b/Sample-Carthage/Icon.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/project.pbxproj b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..77ce58e --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/project.pbxproj @@ -0,0 +1,494 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7AC08E901D300D6700F06B44 /* GoogleAPIKeyProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC08E8F1D300D6700F06B44 /* GoogleAPIKeyProvider.swift */; }; + 7AC37A3B1DDC397200E03E4E /* GoogleMaps.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC37A381DDC397200E03E4E /* GoogleMaps.framework */; }; + 7AC37A3C1DDC397200E03E4E /* GoogleMapsBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC37A391DDC397200E03E4E /* GoogleMapsBase.framework */; }; + 7AC37A3D1DDC397200E03E4E /* GoogleMapsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC37A3A1DDC397200E03E4E /* GoogleMapsCore.framework */; }; + 7AC68B621D300D0400B81C70 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC68B611D300D0400B81C70 /* AppDelegate.swift */; }; + 7AC68B671D300D0400B81C70 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7AC68B651D300D0400B81C70 /* Main.storyboard */; }; + 7AC68B691D300D0400B81C70 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7AC68B681D300D0400B81C70 /* Images.xcassets */; }; + 7ACF3E991D427CCF00830BD6 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E981D427CCF00830BD6 /* CoreText.framework */; }; + 7ACF3E9B1D427CD400830BD6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9A1D427CD400830BD6 /* CoreGraphics.framework */; }; + 7ACF3EAA1D427D1F00830BD6 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9C1D427D1F00830BD6 /* Accelerate.framework */; }; + 7ACF3EAB1D427D1F00830BD6 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9D1D427D1F00830BD6 /* AVFoundation.framework */; }; + 7ACF3EAC1D427D1F00830BD6 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9E1D427D1F00830BD6 /* CoreBluetooth.framework */; }; + 7ACF3EAD1D427D1F00830BD6 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3E9F1D427D1F00830BD6 /* CoreData.framework */; }; + 7ACF3EAE1D427D1F00830BD6 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA01D427D1F00830BD6 /* CoreLocation.framework */; }; + 7ACF3EAF1D427D1F00830BD6 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA11D427D1F00830BD6 /* GLKit.framework */; }; + 7ACF3EB01D427D1F00830BD6 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA21D427D1F00830BD6 /* ImageIO.framework */; }; + 7ACF3EB11D427D1F00830BD6 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA31D427D1F00830BD6 /* libc++.tbd */; }; + 7ACF3EB21D427D1F00830BD6 /* libicucore.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA41D427D1F00830BD6 /* libicucore.tbd */; }; + 7ACF3EB31D427D1F00830BD6 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA51D427D1F00830BD6 /* libz.tbd */; }; + 7ACF3EB41D427D1F00830BD6 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA61D427D1F00830BD6 /* OpenGLES.framework */; }; + 7ACF3EB51D427D1F00830BD6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA71D427D1F00830BD6 /* QuartzCore.framework */; }; + 7ACF3EB61D427D1F00830BD6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA81D427D1F00830BD6 /* Security.framework */; }; + 7ACF3EB71D427D1F00830BD6 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7ACF3EA91D427D1F00830BD6 /* SystemConfiguration.framework */; }; + 7ACF3EBB1D427D7300830BD6 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACF3EB81D427D7300830BD6 /* MainViewController.swift */; }; + 7ACF3EBC1D427D7300830BD6 /* ResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACF3EB91D427D7300830BD6 /* ResultsViewController.swift */; }; + 7ACF3EBD1D427D7300830BD6 /* WaypointViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACF3EBA1D427D7300830BD6 /* WaypointViewController.swift */; }; + 7ACF3EC01D427DA100830BD6 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF3EBE1D427DA100830BD6 /* LaunchScreen.xib */; }; + 7AD02E1B1F8C00C700F2E183 /* GoogleMaps.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7AD02E1A1F8C00C600F2E183 /* GoogleMaps.bundle */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7AC08E8F1D300D6700F06B44 /* GoogleAPIKeyProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GoogleAPIKeyProvider.swift; path = Private/GoogleAPIKeyProvider.swift; sourceTree = SOURCE_ROOT; }; + 7AC37A381DDC397200E03E4E /* GoogleMaps.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMaps.framework; path = Pods/PXGoogleDirections/Dependencies/GoogleMaps.framework; sourceTree = ""; }; + 7AC37A391DDC397200E03E4E /* GoogleMapsBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMapsBase.framework; path = Pods/PXGoogleDirections/Dependencies/GoogleMapsBase.framework; sourceTree = ""; }; + 7AC37A3A1DDC397200E03E4E /* GoogleMapsCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMapsCore.framework; path = Pods/PXGoogleDirections/Dependencies/GoogleMapsCore.framework; sourceTree = ""; }; + 7AC68B5E1D300D0300B81C70 /* PXGoogleDirectionsSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PXGoogleDirectionsSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AC68B611D300D0400B81C70 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AC68B661D300D0400B81C70 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 7AC68B681D300D0400B81C70 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 7AC68B6D1D300D0400B81C70 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7ACF3E981D427CCF00830BD6 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + 7ACF3E9A1D427CD400830BD6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 7ACF3E9C1D427D1F00830BD6 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 7ACF3E9D1D427D1F00830BD6 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 7ACF3E9E1D427D1F00830BD6 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; + 7ACF3E9F1D427D1F00830BD6 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 7ACF3EA01D427D1F00830BD6 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 7ACF3EA11D427D1F00830BD6 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; + 7ACF3EA21D427D1F00830BD6 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; + 7ACF3EA31D427D1F00830BD6 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 7ACF3EA41D427D1F00830BD6 /* libicucore.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libicucore.tbd; path = usr/lib/libicucore.tbd; sourceTree = SDKROOT; }; + 7ACF3EA51D427D1F00830BD6 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 7ACF3EA61D427D1F00830BD6 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + 7ACF3EA71D427D1F00830BD6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 7ACF3EA81D427D1F00830BD6 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 7ACF3EA91D427D1F00830BD6 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 7ACF3EB81D427D7300830BD6 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; + 7ACF3EB91D427D7300830BD6 /* ResultsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResultsViewController.swift; sourceTree = ""; }; + 7ACF3EBA1D427D7300830BD6 /* WaypointViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WaypointViewController.swift; sourceTree = ""; }; + 7ACF3EBF1D427DA100830BD6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 7AD02E1A1F8C00C600F2E183 /* GoogleMaps.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = GoogleMaps.bundle; path = Pods/PXGoogleDirections/Dependencies/GoogleMaps.framework/Resources/GoogleMaps.bundle; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7AC68B5B1D300D0300B81C70 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AC37A3B1DDC397200E03E4E /* GoogleMaps.framework in Frameworks */, + 7AC37A3C1DDC397200E03E4E /* GoogleMapsBase.framework in Frameworks */, + 7AC37A3D1DDC397200E03E4E /* GoogleMapsCore.framework in Frameworks */, + 7ACF3EAA1D427D1F00830BD6 /* Accelerate.framework in Frameworks */, + 7ACF3EAB1D427D1F00830BD6 /* AVFoundation.framework in Frameworks */, + 7ACF3EAC1D427D1F00830BD6 /* CoreBluetooth.framework in Frameworks */, + 7ACF3EAD1D427D1F00830BD6 /* CoreData.framework in Frameworks */, + 7ACF3EAE1D427D1F00830BD6 /* CoreLocation.framework in Frameworks */, + 7ACF3EAF1D427D1F00830BD6 /* GLKit.framework in Frameworks */, + 7ACF3EB01D427D1F00830BD6 /* ImageIO.framework in Frameworks */, + 7ACF3EB11D427D1F00830BD6 /* libc++.tbd in Frameworks */, + 7ACF3EB21D427D1F00830BD6 /* libicucore.tbd in Frameworks */, + 7ACF3EB31D427D1F00830BD6 /* libz.tbd in Frameworks */, + 7ACF3EB41D427D1F00830BD6 /* OpenGLES.framework in Frameworks */, + 7ACF3EB51D427D1F00830BD6 /* QuartzCore.framework in Frameworks */, + 7ACF3EB61D427D1F00830BD6 /* Security.framework in Frameworks */, + 7ACF3EB71D427D1F00830BD6 /* SystemConfiguration.framework in Frameworks */, + 7ACF3E9B1D427CD400830BD6 /* CoreGraphics.framework in Frameworks */, + 7ACF3E991D427CCF00830BD6 /* CoreText.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7AC68B551D300D0300B81C70 = { + isa = PBXGroup; + children = ( + 7AC68B601D300D0400B81C70 /* PXGoogleDirectionsSample */, + 7AC68B5F1D300D0300B81C70 /* Products */, + E606A026ADB2A38A37373483 /* Frameworks */, + ); + sourceTree = ""; + }; + 7AC68B5F1D300D0300B81C70 /* Products */ = { + isa = PBXGroup; + children = ( + 7AC68B5E1D300D0300B81C70 /* PXGoogleDirectionsSample.app */, + ); + name = Products; + sourceTree = ""; + }; + 7AC68B601D300D0400B81C70 /* PXGoogleDirectionsSample */ = { + isa = PBXGroup; + children = ( + 7AC68B611D300D0400B81C70 /* AppDelegate.swift */, + 7AC08E8F1D300D6700F06B44 /* GoogleAPIKeyProvider.swift */, + 7ACF3EB81D427D7300830BD6 /* MainViewController.swift */, + 7ACF3EB91D427D7300830BD6 /* ResultsViewController.swift */, + 7ACF3EBA1D427D7300830BD6 /* WaypointViewController.swift */, + 7ACF3EBE1D427DA100830BD6 /* LaunchScreen.xib */, + 7AC68B651D300D0400B81C70 /* Main.storyboard */, + 7AC68B681D300D0400B81C70 /* Images.xcassets */, + 7AC68B6D1D300D0400B81C70 /* Info.plist */, + ); + path = PXGoogleDirectionsSample; + sourceTree = ""; + }; + E606A026ADB2A38A37373483 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7AD02E1A1F8C00C600F2E183 /* GoogleMaps.bundle */, + 7AC37A381DDC397200E03E4E /* GoogleMaps.framework */, + 7AC37A391DDC397200E03E4E /* GoogleMapsBase.framework */, + 7AC37A3A1DDC397200E03E4E /* GoogleMapsCore.framework */, + 7ACF3E9C1D427D1F00830BD6 /* Accelerate.framework */, + 7ACF3E9D1D427D1F00830BD6 /* AVFoundation.framework */, + 7ACF3E9E1D427D1F00830BD6 /* CoreBluetooth.framework */, + 7ACF3E9F1D427D1F00830BD6 /* CoreData.framework */, + 7ACF3EA01D427D1F00830BD6 /* CoreLocation.framework */, + 7ACF3EA11D427D1F00830BD6 /* GLKit.framework */, + 7ACF3EA21D427D1F00830BD6 /* ImageIO.framework */, + 7ACF3EA31D427D1F00830BD6 /* libc++.tbd */, + 7ACF3EA41D427D1F00830BD6 /* libicucore.tbd */, + 7ACF3EA51D427D1F00830BD6 /* libz.tbd */, + 7ACF3EA61D427D1F00830BD6 /* OpenGLES.framework */, + 7ACF3EA71D427D1F00830BD6 /* QuartzCore.framework */, + 7ACF3EA81D427D1F00830BD6 /* Security.framework */, + 7ACF3EA91D427D1F00830BD6 /* SystemConfiguration.framework */, + 7ACF3E9A1D427CD400830BD6 /* CoreGraphics.framework */, + 7ACF3E981D427CCF00830BD6 /* CoreText.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7AC68B5D1D300D0300B81C70 /* PXGoogleDirectionsSample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7AC68B701D300D0400B81C70 /* Build configuration list for PBXNativeTarget "PXGoogleDirectionsSample" */; + buildPhases = ( + 7BD204DEC9C1B9C572EA1A73 /* [CP] Check Pods Manifest.lock */, + 7AC68B5A1D300D0300B81C70 /* Sources */, + 7AC68B5B1D300D0300B81C70 /* Frameworks */, + 7AC68B5C1D300D0300B81C70 /* Resources */, + 295018C93D0F212C41A0F980 /* [CP] Embed Pods Frameworks */, + DB3204A5C84EC3A7A17CAFE8 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PXGoogleDirectionsSample; + productName = PXGoogleDirectionsSample; + productReference = 7AC68B5E1D300D0300B81C70 /* PXGoogleDirectionsSample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7AC68B561D300D0300B81C70 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = RLT; + TargetAttributes = { + 7AC68B5D1D300D0300B81C70 = { + CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = H4ZDL2CC7Y; + LastSwiftMigration = 0910; + }; + }; + }; + buildConfigurationList = 7AC68B591D300D0300B81C70 /* Build configuration list for PBXProject "PXGoogleDirectionsSample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7AC68B551D300D0300B81C70; + productRefGroup = 7AC68B5F1D300D0300B81C70 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7AC68B5D1D300D0300B81C70 /* PXGoogleDirectionsSample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7AC68B5C1D300D0300B81C70 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AD02E1B1F8C00C700F2E183 /* GoogleMaps.bundle in Resources */, + 7ACF3EC01D427DA100830BD6 /* LaunchScreen.xib in Resources */, + 7AC68B691D300D0400B81C70 /* Images.xcassets in Resources */, + 7AC68B671D300D0400B81C70 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 295018C93D0F212C41A0F980 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/PXGoogleDirections/PXGoogleDirections.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PXGoogleDirections.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7BD204DEC9C1B9C572EA1A73 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PXGoogleDirectionsSample-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + DB3204A5C84EC3A7A17CAFE8 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PXGoogleDirectionsSample/Pods-PXGoogleDirectionsSample-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7AC68B5A1D300D0300B81C70 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AC08E901D300D6700F06B44 /* GoogleAPIKeyProvider.swift in Sources */, + 7AC68B621D300D0400B81C70 /* AppDelegate.swift in Sources */, + 7ACF3EBC1D427D7300830BD6 /* ResultsViewController.swift in Sources */, + 7ACF3EBB1D427D7300830BD6 /* MainViewController.swift in Sources */, + 7ACF3EBD1D427D7300830BD6 /* WaypointViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 7AC68B651D300D0400B81C70 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 7AC68B661D300D0400B81C70 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 7ACF3EBE1D427DA100830BD6 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 7ACF3EBF1D427DA100830BD6 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 7AC68B6E1D300D0400B81C70 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7AC68B6F1D300D0400B81C70 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7AC68B711D300D0400B81C70 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = H4ZDL2CC7Y; + ENABLE_BITCODE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(PROJECT_DIR)/Pods/PXGoogleDirections/Dependencies", + ); + INFOPLIST_FILE = PXGoogleDirectionsSample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Poulpix.PXGoogleDirectionsSample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; + }; + name = Debug; + }; + 7AC68B721D300D0400B81C70 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = H4ZDL2CC7Y; + ENABLE_BITCODE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "$(PROJECT_DIR)/Pods/PXGoogleDirections/Dependencies", + ); + INFOPLIST_FILE = PXGoogleDirectionsSample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = Poulpix.PXGoogleDirectionsSample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7AC68B591D300D0300B81C70 /* Build configuration list for PBXProject "PXGoogleDirectionsSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7AC68B6E1D300D0400B81C70 /* Debug */, + 7AC68B6F1D300D0400B81C70 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7AC68B701D300D0400B81C70 /* Build configuration list for PBXNativeTarget "PXGoogleDirectionsSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7AC68B711D300D0400B81C70 /* Debug */, + 7AC68B721D300D0400B81C70 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7AC68B561D300D0300B81C70 /* Project object */; +} diff --git a/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1119b49 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/PXGoogleDirectionsSample.xcscheme b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/PXGoogleDirectionsSample.xcscheme new file mode 100755 index 0000000..440d75b --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/PXGoogleDirectionsSample.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/xcschememanagement.plist b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100755 index 0000000..c9a1fe8 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + PXGoogleDirectionsSample.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7AC68B5D1D300D0300B81C70 + + primary + + + + + diff --git a/Sample/PXGoogleDirectionsSample/AppDelegate.swift b/Sample-Carthage/PXGoogleDirectionsSample/AppDelegate.swift similarity index 100% rename from Sample/PXGoogleDirectionsSample/AppDelegate.swift rename to Sample-Carthage/PXGoogleDirectionsSample/AppDelegate.swift diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib b/Sample-Carthage/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..42b8028 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Base.lproj/Main.storyboard b/Sample-Carthage/PXGoogleDirectionsSample/Base.lproj/Main.storyboard new file mode 100644 index 0000000..626f834 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Base.lproj/Main.storyboard @@ -0,0 +1,976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1d060ed --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,93 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Contents.json b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json new file mode 100644 index 0000000..c25d3a5 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Next.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Next@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Next@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png new file mode 100644 index 0000000..466a830 Binary files /dev/null and b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png new file mode 100644 index 0000000..4d455df Binary files /dev/null and b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png new file mode 100644 index 0000000..5b5ace1 Binary files /dev/null and b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json new file mode 100644 index 0000000..83a757d --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Previous.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Previous@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Previous@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png new file mode 100644 index 0000000..616f2ac Binary files /dev/null and b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png new file mode 100644 index 0000000..d44ffe7 Binary files /dev/null and b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png new file mode 100644 index 0000000..f668296 Binary files /dev/null and b/Sample-Carthage/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png differ diff --git a/Sample-Carthage/PXGoogleDirectionsSample/Info.plist b/Sample-Carthage/PXGoogleDirectionsSample/Info.plist new file mode 100644 index 0000000..e9ebc13 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/Info.plist @@ -0,0 +1,65 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + com.Poulpix.PXGoogleDirectionsSample + CFBundleURLSchemes + + PXSample + + + + CFBundleVersion + 1 + LSApplicationQueriesSchemes + + comgooglemaps + comgooglemaps-x-callback + + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Sample/PXGoogleDirectionsSample/MainViewController.swift b/Sample-Carthage/PXGoogleDirectionsSample/MainViewController.swift similarity index 100% rename from Sample/PXGoogleDirectionsSample/MainViewController.swift rename to Sample-Carthage/PXGoogleDirectionsSample/MainViewController.swift diff --git a/Sample-Carthage/PXGoogleDirectionsSample/ResultsViewController.swift b/Sample-Carthage/PXGoogleDirectionsSample/ResultsViewController.swift new file mode 100644 index 0000000..ffbf0d0 --- /dev/null +++ b/Sample-Carthage/PXGoogleDirectionsSample/ResultsViewController.swift @@ -0,0 +1,129 @@ +// +// ResultsViewController.swift +// PXGoogleDirectionsSample +// +// Created by Romain on 21/03/2015. +// Copyright (c) 2015 Poulpix. All rights reserved. +// + +import UIKit +import PXGoogleDirections +import GoogleMaps + +class ResultsViewController: UIViewController { + @IBOutlet weak var prevButton: UIButton! + @IBOutlet weak var routesLabel: UILabel! + @IBOutlet weak var nextButton: UIButton! + @IBOutlet weak var mapView: GMSMapView! + @IBOutlet weak var directions: UITableView! + var request: PXGoogleDirections! + var results: [PXGoogleDirectionsRoute]! + var routeIndex: Int = 0 + + override func viewDidLoad() { + super.viewDidLoad() + mapView.delegate = self + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + updateRoute() + } + + @IBAction func previousButtonTouched(_ sender: UIButton) { + routeIndex -= 1 + updateRoute() + } + + @IBAction func nextButtonTouched(_ sender: UIButton) { + routeIndex += 1 + updateRoute() + } + + @IBAction func closeButtonTouched(_ sender: UIButton) { + dismiss(animated: true, completion: nil) + } + + @IBAction func openInGoogleMapsButtonTouched(_ sender: UIButton) { + if !request.openInGoogleMaps(center: nil, mapMode: .streetView, view: Set(arrayLiteral: PXGoogleMapsView.satellite, PXGoogleMapsView.traffic, PXGoogleMapsView.transit), zoom: 15, callbackURL: URL(string: "pxsample://"), callbackName: "PXSample") { + let alert = UIAlertController(title: "PXGoogleDirectionsSample", message: "Could not launch the Google Maps app. Maybe this app is not installed on this device?", preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true, completion: nil) + } + } + + func updateRoute() { + prevButton.isEnabled = (routeIndex > 0) + nextButton.isEnabled = (routeIndex < (results).count - 1) + routesLabel.text = "\(routeIndex + 1) of \((results).count)" + mapView.clear() + for i in 0 ..< results.count { + if i != routeIndex { + results[i].drawOnMap(mapView, approximate: false, strokeColor: UIColor.lightGray, strokeWidth: 3.0) + } + } + mapView.animate(with: GMSCameraUpdate.fit(results[routeIndex].bounds!, withPadding: 40.0)) + results[routeIndex].drawOnMap(mapView, approximate: false, strokeColor: UIColor.purple, strokeWidth: 4.0) + results[routeIndex].drawOriginMarkerOnMap(mapView, title: "Origin", color: UIColor.green, opacity: 1.0, flat: true) + results[routeIndex].drawDestinationMarkerOnMap(mapView, title: "Destination", color: UIColor.red, opacity: 1.0, flat: true) + directions.reloadData() + } +} + +extension ResultsViewController: GMSMapViewDelegate { +} + +extension ResultsViewController: UITableViewDataSource { + func numberOfSections(in tableView: UITableView) -> Int { + return (results[routeIndex].legs).count + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return (results[routeIndex].legs[section].steps).count + } + + func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + let leg = results[routeIndex].legs[section] + if let dist = leg.distance?.description, let dur = leg.duration?.description { + return "Step \(section + 1) (\(dist), \(dur))" + } else { + return "Step \(section + 1)" + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + var cell = tableView.dequeueReusableCell(withIdentifier: "RouteStep") + if (cell == nil) { + cell = UITableViewCell(style: .subtitle, reuseIdentifier: "RouteStep") + } + let step = results[routeIndex].legs[indexPath.section].steps[indexPath.row] + if let instr = step.rawInstructions { + cell!.textLabel!.text = instr + } + if let dist = step.distance?.description, let dur = step.duration?.description { + cell!.detailTextLabel?.text = "\(dist), \(dur)" + } + return cell! + } + + func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { + let step = results[routeIndex].legs[indexPath.section].steps[indexPath.row] + mapView.animate(with: GMSCameraUpdate.fit(step.bounds!, withPadding: 40.0)) + } + + func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { + let step = results[routeIndex].legs[indexPath.section].steps[indexPath.row] + var msg: String + if let m = step.maneuver { + msg = "\(step.rawInstructions!)\nGPS instruction: \(m)\nFrom: (\(step.startLocation!.latitude); \(step.startLocation!.longitude))\nTo: (\(step.endLocation!.latitude); \(step.endLocation!.longitude))" + } else { + msg = "\(step.rawInstructions!)\nFrom: (\(step.startLocation!.latitude); \(step.startLocation!.longitude))\nTo: (\(step.endLocation!.latitude); \(step.endLocation!.longitude))" + } + let alert = UIAlertController(title: "PXGoogleDirectionsSample", message: msg, preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true, completion: nil) + } +} + +extension ResultsViewController: UITableViewDelegate { +} diff --git a/Sample/PXGoogleDirectionsSample/WaypointViewController.swift b/Sample-Carthage/PXGoogleDirectionsSample/WaypointViewController.swift similarity index 100% rename from Sample/PXGoogleDirectionsSample/WaypointViewController.swift rename to Sample-Carthage/PXGoogleDirectionsSample/WaypointViewController.swift diff --git a/Sample-Cocoapods/Icon.png b/Sample-Cocoapods/Icon.png new file mode 100644 index 0000000..d94b4f0 Binary files /dev/null and b/Sample-Cocoapods/Icon.png differ diff --git a/Sample/PXGoogleDirectionsSample.xcodeproj/project.pbxproj b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/project.pbxproj similarity index 100% rename from Sample/PXGoogleDirectionsSample.xcodeproj/project.pbxproj rename to Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/project.pbxproj diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1119b49 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/PXGoogleDirectionsSample.xcscheme b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/PXGoogleDirectionsSample.xcscheme new file mode 100755 index 0000000..440d75b --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/PXGoogleDirectionsSample.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/xcschememanagement.plist b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100755 index 0000000..c9a1fe8 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample.xcodeproj/xcuserdata/Romain.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + PXGoogleDirectionsSample.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7AC68B5D1D300D0300B81C70 + + primary + + + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata b/Sample-Cocoapods/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..a46f21b --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample.xcworkspace/xcuserdata/Romain.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Sample-Cocoapods/PXGoogleDirectionsSample.xcworkspace/xcuserdata/Romain.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100755 index 0000000..ed9a9b4 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample.xcworkspace/xcuserdata/Romain.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/AppDelegate.swift b/Sample-Cocoapods/PXGoogleDirectionsSample/AppDelegate.swift new file mode 100644 index 0000000..041a59c --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/AppDelegate.swift @@ -0,0 +1,27 @@ +// +// AppDelegate.swift +// PXGoogleDirectionsSample +// +// Created by Romain on 08/03/2015. +// Copyright (c) 2015 Poulpix. All rights reserved. +// + +import UIKit +import PXGoogleDirections +import GoogleMaps + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + var directionsAPI: PXGoogleDirections! + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + UISegmentedControl.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "Avenir Next", size: 15.0)!], for: UIControlState()) + // TODO: For you fellow developer: replace `getGoogleAPI{Client|Server}Key()` in the two lines below with a string containing your own Google Maps API keys! + GMSServices.provideAPIKey(getGoogleAPIClientKey()) // A valid iOS client-side API key tied to your application's bundle identifier is required here + directionsAPI = PXGoogleDirections(apiKey: getGoogleAPIServerKey()) // A valid server-side API key is required here + + return true + } +} diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib b/Sample-Cocoapods/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..42b8028 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Base.lproj/LaunchScreen.xib @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Base.lproj/Main.storyboard b/Sample-Cocoapods/PXGoogleDirectionsSample/Base.lproj/Main.storyboard new file mode 100644 index 0000000..626f834 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Base.lproj/Main.storyboard @@ -0,0 +1,976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1d060ed --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,93 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Contents.json b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json new file mode 100644 index 0000000..c25d3a5 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Next.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Next@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Next@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png new file mode 100644 index 0000000..466a830 Binary files /dev/null and b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next.png differ diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png new file mode 100644 index 0000000..4d455df Binary files /dev/null and b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@2x.png differ diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png new file mode 100644 index 0000000..5b5ace1 Binary files /dev/null and b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Next.imageset/Next@3x.png differ diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json new file mode 100644 index 0000000..83a757d --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Previous.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Previous@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Previous@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png new file mode 100644 index 0000000..616f2ac Binary files /dev/null and b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous.png differ diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png new file mode 100644 index 0000000..d44ffe7 Binary files /dev/null and b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@2x.png differ diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png new file mode 100644 index 0000000..f668296 Binary files /dev/null and b/Sample-Cocoapods/PXGoogleDirectionsSample/Images.xcassets/Previous.imageset/Previous@3x.png differ diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/Info.plist b/Sample-Cocoapods/PXGoogleDirectionsSample/Info.plist new file mode 100644 index 0000000..e9ebc13 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/Info.plist @@ -0,0 +1,65 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + com.Poulpix.PXGoogleDirectionsSample + CFBundleURLSchemes + + PXSample + + + + CFBundleVersion + 1 + LSApplicationQueriesSchemes + + comgooglemaps + comgooglemaps-x-callback + + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/MainViewController.swift b/Sample-Cocoapods/PXGoogleDirectionsSample/MainViewController.swift new file mode 100644 index 0000000..c182ff3 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/MainViewController.swift @@ -0,0 +1,281 @@ +// +// ViewController.swift +// RLGoogleDirectionsSample +// +// Created by Romain on 07/03/2015. +// Copyright (c) 2015 RLT. All rights reserved. +// + +import UIKit +import CoreLocation +import PXGoogleDirections +import GoogleMaps + +protocol MainViewControllerDelegate { + func didAddWaypoint(_ waypoint: PXLocation) +} + +class MainViewController: UIViewController { + @IBOutlet weak var originField: UITextField! + @IBOutlet weak var destinationField: UITextField! + @IBOutlet weak var modeField: UISegmentedControl! + @IBOutlet weak var advancedSwitch: UISwitch! + @IBOutlet weak var advancedView: UIView! + @IBOutlet weak var unitField: UISegmentedControl! + @IBOutlet weak var transitRoutingField: UISegmentedControl! + @IBOutlet weak var trafficModelField: UISegmentedControl! + @IBOutlet weak var alternativeSwitch: UISwitch! + @IBOutlet weak var busSwitch: UISwitch! + @IBOutlet weak var subwaySwitch: UISwitch! + @IBOutlet weak var trainSwitch: UISwitch! + @IBOutlet weak var tramSwitch: UISwitch! + @IBOutlet weak var railSwitch: UISwitch! + @IBOutlet weak var avoidTollsSwitch: UISwitch! + @IBOutlet weak var avoidHighwaysSwitch: UISwitch! + @IBOutlet weak var avoidFerriesSwitch: UISwitch! + @IBOutlet weak var startArriveField: UISegmentedControl! + @IBOutlet weak var startArriveDateField: UITextField! + @IBOutlet weak var waypointsLabel: UILabel! + @IBOutlet weak var optimizeWaypointsSwitch: UISwitch! + @IBOutlet weak var languageField: UISegmentedControl! + var startArriveDate: Date? + var waypoints: [PXLocation] = [PXLocation]() + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + updateStartArriveDateField(nil) + updateWaypointsField() + let datePicker = UIDatePicker() + datePicker.sizeToFit() + datePicker.autoresizingMask = [.flexibleWidth, .flexibleHeight] + datePicker.datePickerMode = .dateAndTime + datePicker.minuteInterval = 5 + startArriveDateField.inputView = datePicker + let keyboardDoneButtonView = UIToolbar() + keyboardDoneButtonView.barStyle = .black + keyboardDoneButtonView.isTranslucent = true + keyboardDoneButtonView.tintColor = nil + keyboardDoneButtonView.sizeToFit() + let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(MainViewController.doneButtonTouched(_:))) + let clearButton = UIBarButtonItem(title: "Clear", style: .plain, target: self, action: #selector(MainViewController.clearButtonTouched(_:))) + keyboardDoneButtonView.setItems([doneButton, clearButton], animated: false) + startArriveDateField.inputAccessoryView = keyboardDoneButtonView + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + + fileprivate var directionsAPI: PXGoogleDirections { + return (UIApplication.shared.delegate as! AppDelegate).directionsAPI + } + + fileprivate func modeFromField() -> PXGoogleDirectionsMode { + return PXGoogleDirectionsMode(rawValue: modeField.selectedSegmentIndex)! + } + + fileprivate func unitFromField() -> PXGoogleDirectionsUnit { + return PXGoogleDirectionsUnit(rawValue: unitField.selectedSegmentIndex)! + } + + fileprivate func transitRoutingPreferenceFromField() -> PXGoogleDirectionsTransitRoutingPreference? { + return PXGoogleDirectionsTransitRoutingPreference(rawValue: transitRoutingField.selectedSegmentIndex) + } + + fileprivate func trafficModelFromField() -> PXGoogleDirectionsTrafficModel? { + return PXGoogleDirectionsTrafficModel(rawValue: trafficModelField.selectedSegmentIndex) + } + + fileprivate func languageFromField() -> String { + return languageField.titleForSegment(at: languageField.selectedSegmentIndex)! + // There are quite a few other languages available, see here for more information: https://developers.google.com/maps/faq#languagesupport + } + + fileprivate func updateStartArriveDateField(_ newDate: Date?) { + startArriveDate = newDate + if let saDate = startArriveDate { + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .medium + dateFormatter.timeStyle = .short + startArriveDateField.text = dateFormatter.string(from: saDate) + } else { + startArriveDateField.text = "" + } + } + + fileprivate func updateWaypointsField() { + switch (waypoints).count { + case 0: + waypointsLabel.text = "No waypoints" + case 1: + waypointsLabel.text = "1 waypoint" + default: + waypointsLabel.text = "\((waypoints).count) waypoints" + } + } + + @IBAction func advancedOptionsChanged(_ sender: UISwitch) { + UIView.animate(withDuration: 0.5, animations: { + self.advancedView.alpha = (self.advancedSwitch.isOn ? 1.0 : 0.0) + }) + } + + @IBAction func selectDateButtonTouched(_ sender: UIButton) { + startArriveDateField.isEnabled = true + startArriveDateField.becomeFirstResponder() + } + + @objc func doneButtonTouched(_ sender: UIBarButtonItem) { + updateStartArriveDateField((startArriveDateField.inputView as! UIDatePicker).date) + startArriveDateField.resignFirstResponder() + startArriveDateField.isEnabled = false + } + + @objc func clearButtonTouched(_ sender: UIBarButtonItem) { + updateStartArriveDateField(nil) + startArriveDateField.resignFirstResponder() + startArriveDateField.isEnabled = false + } + + @IBAction func addWaypointButtonTouched(_ sender: UIButton) { + if let wpvc = self.storyboard?.instantiateViewController(withIdentifier: "Waypoint") as? WaypointViewController { + wpvc.delegate = self + self.present(wpvc, animated: true, completion: nil) + } + } + + @IBAction func clearWaypointsButtonTouched(_ sender: UIButton) { + waypoints.removeAll(keepingCapacity: false) + updateWaypointsField() + } + + @IBAction func goButtonTouched(_ sender: UIButton) { + directionsAPI.delegate = self + directionsAPI.from = PXLocation.namedLocation(originField.text!) + directionsAPI.to = PXLocation.namedLocation(destinationField.text!) + directionsAPI.mode = modeFromField() + if advancedSwitch.isOn { + directionsAPI.transitRoutingPreference = transitRoutingPreferenceFromField() + directionsAPI.trafficModel = trafficModelFromField() + directionsAPI.units = unitFromField() + directionsAPI.alternatives = alternativeSwitch.isOn + directionsAPI.transitModes = Set() + if busSwitch.isOn { + directionsAPI.transitModes.insert(.bus) + } + if subwaySwitch.isOn { + directionsAPI.transitModes.insert(.subway) + } + if trainSwitch.isOn { + directionsAPI.transitModes.insert(.train) + } + if tramSwitch.isOn { + directionsAPI.transitModes.insert(.tram) + } + if railSwitch.isOn { + directionsAPI.transitModes.insert(.rail) + } + directionsAPI.featuresToAvoid = Set() + if avoidTollsSwitch.isOn { + directionsAPI.featuresToAvoid.insert(.tolls) + } + if avoidHighwaysSwitch.isOn { + directionsAPI.featuresToAvoid.insert(.highways) + } + if avoidFerriesSwitch.isOn { + directionsAPI.featuresToAvoid.insert(.ferries) + } + switch startArriveField.selectedSegmentIndex { + case 0: + directionsAPI.departureTime = .now + directionsAPI.arrivalTime = nil + case 1: + if let saDate = startArriveDate { + directionsAPI.departureTime = PXTime.timeFromDate(saDate) + directionsAPI.arrivalTime = nil + } else { + return + } + case 2: + if let saDate = startArriveDate { + directionsAPI.departureTime = nil + directionsAPI.arrivalTime = PXTime.timeFromDate(saDate) + } else { + return + } + default: + break + } + directionsAPI.waypoints = waypoints + directionsAPI.optimizeWaypoints = optimizeWaypointsSwitch.isOn + directionsAPI.language = languageFromField() + } else { + directionsAPI.transitRoutingPreference = nil + directionsAPI.trafficModel = nil + directionsAPI.units = nil + directionsAPI.alternatives = nil + directionsAPI.transitModes = Set() + directionsAPI.featuresToAvoid = Set() + directionsAPI.departureTime = nil + directionsAPI.arrivalTime = nil + directionsAPI.waypoints = [PXLocation]() + directionsAPI.optimizeWaypoints = nil + directionsAPI.language = nil + } + // directionsAPI.region = "fr" // Feature not demonstrated in this sample app + directionsAPI.calculateDirections { (response) -> Void in + DispatchQueue.main.async(execute: { () -> Void in + switch response { + case let .error(_, error): + let alert = UIAlertController(title: "PXGoogleDirectionsSample", message: "Error: \(error.localizedDescription)", preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true, completion: nil) + case let .success(request, routes): + if let rvc = self.storyboard?.instantiateViewController(withIdentifier: "Results") as? ResultsViewController { + rvc.request = request + rvc.results = routes + self.present(rvc, animated: true, completion: nil) + } + } + }) + } + } +} + +extension MainViewController: PXGoogleDirectionsDelegate { + func googleDirectionsWillSendRequestToAPI(_ googleDirections: PXGoogleDirections, withURL requestURL: URL) -> Bool { + NSLog("googleDirectionsWillSendRequestToAPI:withURL:") + return true + } + + func googleDirectionsDidSendRequestToAPI(_ googleDirections: PXGoogleDirections, withURL requestURL: URL) { + NSLog("googleDirectionsDidSendRequestToAPI:withURL:") + NSLog("\(requestURL.absoluteString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)") + } + + func googleDirections(_ googleDirections: PXGoogleDirections, didReceiveRawDataFromAPI data: Data) { + NSLog("googleDirections:didReceiveRawDataFromAPI:") + NSLog(String(data: data, encoding: .utf8)!) + } + + func googleDirectionsRequestDidFail(_ googleDirections: PXGoogleDirections, withError error: NSError) { + NSLog("googleDirectionsRequestDidFail:withError:") + NSLog("\(error)") + } + + func googleDirections(_ googleDirections: PXGoogleDirections, didReceiveResponseFromAPI apiResponse: [PXGoogleDirectionsRoute]) { + NSLog("googleDirections:didReceiveResponseFromAPI:") + NSLog("Got \(apiResponse.count) routes") + for i in 0 ..< apiResponse.count { + NSLog("Route \(i) has \(apiResponse[i].legs.count) legs") + } + } +} + +extension MainViewController: MainViewControllerDelegate { + func didAddWaypoint(_ waypoint: PXLocation) { + waypoints.append(waypoint) + updateWaypointsField() + } +} diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/ResultsViewController.swift b/Sample-Cocoapods/PXGoogleDirectionsSample/ResultsViewController.swift new file mode 100644 index 0000000..ffbf0d0 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/ResultsViewController.swift @@ -0,0 +1,129 @@ +// +// ResultsViewController.swift +// PXGoogleDirectionsSample +// +// Created by Romain on 21/03/2015. +// Copyright (c) 2015 Poulpix. All rights reserved. +// + +import UIKit +import PXGoogleDirections +import GoogleMaps + +class ResultsViewController: UIViewController { + @IBOutlet weak var prevButton: UIButton! + @IBOutlet weak var routesLabel: UILabel! + @IBOutlet weak var nextButton: UIButton! + @IBOutlet weak var mapView: GMSMapView! + @IBOutlet weak var directions: UITableView! + var request: PXGoogleDirections! + var results: [PXGoogleDirectionsRoute]! + var routeIndex: Int = 0 + + override func viewDidLoad() { + super.viewDidLoad() + mapView.delegate = self + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + updateRoute() + } + + @IBAction func previousButtonTouched(_ sender: UIButton) { + routeIndex -= 1 + updateRoute() + } + + @IBAction func nextButtonTouched(_ sender: UIButton) { + routeIndex += 1 + updateRoute() + } + + @IBAction func closeButtonTouched(_ sender: UIButton) { + dismiss(animated: true, completion: nil) + } + + @IBAction func openInGoogleMapsButtonTouched(_ sender: UIButton) { + if !request.openInGoogleMaps(center: nil, mapMode: .streetView, view: Set(arrayLiteral: PXGoogleMapsView.satellite, PXGoogleMapsView.traffic, PXGoogleMapsView.transit), zoom: 15, callbackURL: URL(string: "pxsample://"), callbackName: "PXSample") { + let alert = UIAlertController(title: "PXGoogleDirectionsSample", message: "Could not launch the Google Maps app. Maybe this app is not installed on this device?", preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true, completion: nil) + } + } + + func updateRoute() { + prevButton.isEnabled = (routeIndex > 0) + nextButton.isEnabled = (routeIndex < (results).count - 1) + routesLabel.text = "\(routeIndex + 1) of \((results).count)" + mapView.clear() + for i in 0 ..< results.count { + if i != routeIndex { + results[i].drawOnMap(mapView, approximate: false, strokeColor: UIColor.lightGray, strokeWidth: 3.0) + } + } + mapView.animate(with: GMSCameraUpdate.fit(results[routeIndex].bounds!, withPadding: 40.0)) + results[routeIndex].drawOnMap(mapView, approximate: false, strokeColor: UIColor.purple, strokeWidth: 4.0) + results[routeIndex].drawOriginMarkerOnMap(mapView, title: "Origin", color: UIColor.green, opacity: 1.0, flat: true) + results[routeIndex].drawDestinationMarkerOnMap(mapView, title: "Destination", color: UIColor.red, opacity: 1.0, flat: true) + directions.reloadData() + } +} + +extension ResultsViewController: GMSMapViewDelegate { +} + +extension ResultsViewController: UITableViewDataSource { + func numberOfSections(in tableView: UITableView) -> Int { + return (results[routeIndex].legs).count + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return (results[routeIndex].legs[section].steps).count + } + + func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + let leg = results[routeIndex].legs[section] + if let dist = leg.distance?.description, let dur = leg.duration?.description { + return "Step \(section + 1) (\(dist), \(dur))" + } else { + return "Step \(section + 1)" + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + var cell = tableView.dequeueReusableCell(withIdentifier: "RouteStep") + if (cell == nil) { + cell = UITableViewCell(style: .subtitle, reuseIdentifier: "RouteStep") + } + let step = results[routeIndex].legs[indexPath.section].steps[indexPath.row] + if let instr = step.rawInstructions { + cell!.textLabel!.text = instr + } + if let dist = step.distance?.description, let dur = step.duration?.description { + cell!.detailTextLabel?.text = "\(dist), \(dur)" + } + return cell! + } + + func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { + let step = results[routeIndex].legs[indexPath.section].steps[indexPath.row] + mapView.animate(with: GMSCameraUpdate.fit(step.bounds!, withPadding: 40.0)) + } + + func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { + let step = results[routeIndex].legs[indexPath.section].steps[indexPath.row] + var msg: String + if let m = step.maneuver { + msg = "\(step.rawInstructions!)\nGPS instruction: \(m)\nFrom: (\(step.startLocation!.latitude); \(step.startLocation!.longitude))\nTo: (\(step.endLocation!.latitude); \(step.endLocation!.longitude))" + } else { + msg = "\(step.rawInstructions!)\nFrom: (\(step.startLocation!.latitude); \(step.startLocation!.longitude))\nTo: (\(step.endLocation!.latitude); \(step.endLocation!.longitude))" + } + let alert = UIAlertController(title: "PXGoogleDirectionsSample", message: msg, preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true, completion: nil) + } +} + +extension ResultsViewController: UITableViewDelegate { +} diff --git a/Sample-Cocoapods/PXGoogleDirectionsSample/WaypointViewController.swift b/Sample-Cocoapods/PXGoogleDirectionsSample/WaypointViewController.swift new file mode 100644 index 0000000..4dc3cc6 --- /dev/null +++ b/Sample-Cocoapods/PXGoogleDirectionsSample/WaypointViewController.swift @@ -0,0 +1,57 @@ +// +// WaypointViewController.swift +// PXGoogleDirectionsSample +// +// Created by Romain on 27/03/2015. +// Copyright (c) 2015 Poulpix. All rights reserved. +// + +import UIKit +import CoreLocation +import PXGoogleDirections + +class WaypointViewController: UIViewController { + @IBOutlet weak var namedLocationView: UIView! + @IBOutlet weak var coordinateLocationView: UIView! + @IBOutlet weak var namedLocationField: UITextField! + @IBOutlet weak var latitudeField: UITextField! + @IBOutlet weak var longitudeField: UITextField! + var delegate: MainViewControllerDelegate! + + @IBAction func cancelButtonTouched(_ sender: UIButton) { + dismiss(animated: true, completion: nil) + } + + @IBAction func locationTypeChanged(_ sender: UISegmentedControl) { + switch sender.selectedSegmentIndex { + case 0: + namedLocationView.isHidden = false + coordinateLocationView.isHidden = true + case 1: + namedLocationView.isHidden = true + coordinateLocationView.isHidden = false + default: + break + } + } + + @IBAction func addWaypointButtonTouched(_ sender: UIButton) { + var waypoint: PXLocation? + if !namedLocationView.isHidden { + if namedLocationField.text!.count > 0 { + waypoint = PXLocation.namedLocation(namedLocationField.text!) + } + } + if !coordinateLocationView.isHidden { + if latitudeField.text!.count > 0 && longitudeField.text!.count > 0 { + let lat = NSString(string: latitudeField.text!).doubleValue + let lng = NSString(string: longitudeField.text!).doubleValue + waypoint = PXLocation.coordinateLocation(CLLocationCoordinate2DMake(lat, lng)) + } + } + if let wp = waypoint { + delegate.didAddWaypoint(wp) + dismiss(animated: true, completion: nil) + } + } +} diff --git a/Sample-Cocoapods/Podfile b/Sample-Cocoapods/Podfile new file mode 100755 index 0000000..9178f68 --- /dev/null +++ b/Sample-Cocoapods/Podfile @@ -0,0 +1,8 @@ +source 'https://github.com/CocoaPods/Specs.git' + +platform :ios, '8.1' +use_frameworks! + +target 'PXGoogleDirectionsSample' do + pod 'PXGoogleDirections', :path => '../' +end diff --git a/SampleScreen1.png b/SampleScreen1.png new file mode 100644 index 0000000..5f477f7 Binary files /dev/null and b/SampleScreen1.png differ diff --git a/SampleScreen2.png b/SampleScreen2.png new file mode 100644 index 0000000..ce3b09a Binary files /dev/null and b/SampleScreen2.png differ