[ios] Add SDK version update checking/notification
This commit is contained in:
@@ -8,6 +8,7 @@ Mapbox welcomes participation and contributions from everyone. Please read [CONT
|
||||
|
||||
* The minimum deployment target for this SDK is now iOS 8. ([#8129](https://github.com/mapbox/mapbox-gl-native/pull/8129))
|
||||
* Added support for the Carthage dependency manager. See [our website](https://www.mapbox.com/ios-sdk/) for setup instructions. ([#8257](https://github.com/mapbox/mapbox-gl-native/pull/8257))
|
||||
* Added a simulator-only console notification to inform developers if there is a newer version of this SDK available. ([#8282](https://github.com/mapbox/mapbox-gl-native/pull/8282))
|
||||
|
||||
### Internationalization
|
||||
|
||||
|
||||
@@ -187,6 +187,10 @@
|
||||
7E016D851D9E890300A29A21 /* MGLPolygon+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E016D821D9E890300A29A21 /* MGLPolygon+MGLAdditions.h */; };
|
||||
7E016D861D9E890300A29A21 /* MGLPolygon+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E016D831D9E890300A29A21 /* MGLPolygon+MGLAdditions.m */; };
|
||||
7E016D871D9E890300A29A21 /* MGLPolygon+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E016D831D9E890300A29A21 /* MGLPolygon+MGLAdditions.m */; };
|
||||
9620BB381E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */; };
|
||||
9620BB391E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */; };
|
||||
9620BB3A1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */; };
|
||||
9620BB3B1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */; };
|
||||
968F36B51E4D128D003A5522 /* MGLDistanceFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3557F7AE1E1D27D300CCA5E6 /* MGLDistanceFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
96E027231E57C76E004B8E66 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E027251E57C76E004B8E66 /* Localizable.strings */; };
|
||||
DA00FC8E1D5EEB0D009AABC8 /* MGLAttributionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA00FC8C1D5EEB0D009AABC8 /* MGLAttributionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
@@ -642,6 +646,8 @@
|
||||
7E016D7D1D9E86BE00A29A21 /* MGLPolyline+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MGLPolyline+MGLAdditions.m"; sourceTree = "<group>"; };
|
||||
7E016D821D9E890300A29A21 /* MGLPolygon+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLPolygon+MGLAdditions.h"; sourceTree = "<group>"; };
|
||||
7E016D831D9E890300A29A21 /* MGLPolygon+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MGLPolygon+MGLAdditions.m"; sourceTree = "<group>"; };
|
||||
9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKUpdateChecker.h; sourceTree = "<group>"; };
|
||||
9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = MGLSDKUpdateChecker.mm; sourceTree = "<group>"; };
|
||||
9660916B1E5BBFD700A9A03B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
9660916C1E5BBFD900A9A03B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
9660916D1E5BBFDB00A9A03B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -1523,6 +1529,8 @@
|
||||
DA8848471CBAFB9800AB86E3 /* MGLLocationManager.m */,
|
||||
DA8848481CBAFB9800AB86E3 /* MGLMapboxEvents.h */,
|
||||
DA8848491CBAFB9800AB86E3 /* MGLMapboxEvents.m */,
|
||||
9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */,
|
||||
9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */,
|
||||
);
|
||||
name = Telemetry;
|
||||
sourceTree = "<group>";
|
||||
@@ -1618,6 +1626,7 @@
|
||||
30E578171DAA85520050F07E /* UIImage+MGLAdditions.h in Headers */,
|
||||
DAD1656C1CF41981001FF4B9 /* MGLFeature.h in Headers */,
|
||||
40EDA1C01CFE0E0200D9EA68 /* MGLAnnotationContainerView.h in Headers */,
|
||||
9620BB381E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */,
|
||||
DA88484F1CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h in Headers */,
|
||||
1753ED421E53CE6F00A9FD90 /* MGLConversion.h in Headers */,
|
||||
DA8847F21CBAFA5100AB86E3 /* MGLMapCamera.h in Headers */,
|
||||
@@ -1679,6 +1688,7 @@
|
||||
DA17BE311CC4BDAA00402C41 /* MGLMapView_Private.h in Headers */,
|
||||
DABFB86C1CBE99E500D62B32 /* MGLTypes.h in Headers */,
|
||||
DABFB8691CBE99E500D62B32 /* MGLShape.h in Headers */,
|
||||
9620BB391E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */,
|
||||
3510FFEB1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h in Headers */,
|
||||
35E1A4D91D74336F007AA97F /* MGLValueEvaluator.h in Headers */,
|
||||
7E016D7F1D9E86BE00A29A21 /* MGLPolyline+MGLAdditions.h in Headers */,
|
||||
@@ -2095,6 +2105,7 @@
|
||||
3510FFEC1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm in Sources */,
|
||||
7E016D801D9E86BE00A29A21 /* MGLPolyline+MGLAdditions.m in Sources */,
|
||||
DAED38651D62D0FC00D7640F /* NSURL+MGLAdditions.m in Sources */,
|
||||
9620BB3A1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */,
|
||||
354B83981D2E873E005D9406 /* MGLUserLocationAnnotationView.m in Sources */,
|
||||
DA88485D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m in Sources */,
|
||||
DAD165701CF41981001FF4B9 /* MGLFeature.mm in Sources */,
|
||||
@@ -2172,6 +2183,7 @@
|
||||
3510FFED1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm in Sources */,
|
||||
7E016D811D9E86BE00A29A21 /* MGLPolyline+MGLAdditions.m in Sources */,
|
||||
354B83991D2E873E005D9406 /* MGLUserLocationAnnotationView.m in Sources */,
|
||||
9620BB3B1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */,
|
||||
DAA4E4221CBB730400178DFB /* MGLPointAnnotation.mm in Sources */,
|
||||
DAED38661D62D0FC00D7640F /* NSURL+MGLAdditions.m in Sources */,
|
||||
DAD165711CF41981001FF4B9 /* MGLFeature.mm in Sources */,
|
||||
|
||||
@@ -43,6 +43,9 @@
|
||||
/* Action sheet title */
|
||||
"SDK_NAME" = "Mapbox iOS SDK";
|
||||
|
||||
/* Developer-only SDK update notification; {latest version, in format x.x.x} */
|
||||
"SDK_UPDATE_AVAILABLE" = "Mapbox iOS SDK version %@ is now available:";
|
||||
|
||||
/* Telemetry prompt message */
|
||||
"TELEMETRY_DISABLED_MSG" = "You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data.";
|
||||
|
||||
|
||||
@@ -43,6 +43,9 @@
|
||||
/* Action sheet title */
|
||||
"SDK_NAME" = "Mapbox iOS SDK";
|
||||
|
||||
/* Developer-only SDK update notification; {latest version, in format x.x.x} */
|
||||
"SDK_UPDATE_AVAILABLE" = "現在Mapbox iOS SDK %1$@が入手できる:";
|
||||
|
||||
/* Telemetry prompt message */
|
||||
"TELEMETRY_DISABLED_MSG" = "You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data.";
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
#import "MGLStyle_Private.h"
|
||||
#import "MGLStyleLayer_Private.h"
|
||||
#import "MGLMapboxEvents.h"
|
||||
#import "MGLSDKUpdateChecker.h"
|
||||
#import "MGLCompactCalloutView.h"
|
||||
#import "MGLAnnotationContainerView.h"
|
||||
#import "MGLAnnotationContainerView_Private.h"
|
||||
@@ -347,6 +348,14 @@ public:
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (void)initialize
|
||||
{
|
||||
if (self == [MGLMapView self])
|
||||
{
|
||||
[MGLSDKUpdateChecker checkForUpdates];
|
||||
}
|
||||
}
|
||||
|
||||
+ (NS_SET_OF(NSString *) *)keyPathsForValuesAffectingStyle
|
||||
{
|
||||
return [NSSet setWithObject:@"styleURL"];
|
||||
|
||||
13
platform/ios/src/MGLSDKUpdateChecker.h
Normal file
13
platform/ios/src/MGLSDKUpdateChecker.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MGLFoundation.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MGLSDKUpdateChecker : NSObject
|
||||
|
||||
+ (void)checkForUpdates;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
39
platform/ios/src/MGLSDKUpdateChecker.mm
Normal file
39
platform/ios/src/MGLSDKUpdateChecker.mm
Normal file
@@ -0,0 +1,39 @@
|
||||
#import "MGLSDKUpdateChecker.h"
|
||||
#import "NSBundle+MGLAdditions.h"
|
||||
#import "NSProcessInfo+MGLAdditions.h"
|
||||
|
||||
@implementation MGLSDKUpdateChecker
|
||||
|
||||
+ (void)checkForUpdates {
|
||||
#if TARGET_IPHONE_SIMULATOR
|
||||
// Abort if running in a playground.
|
||||
if ([[NSBundle mainBundle].bundleIdentifier hasPrefix:@"com.apple.dt.playground."] ||
|
||||
NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *currentVersion = [NSBundle mgl_frameworkInfoDictionary][@"MGLSemanticVersionString"];
|
||||
|
||||
// Skip version check if weʼre doing gl-native development, as the framework
|
||||
// version is `1` until built for packaging.
|
||||
if ([currentVersion isEqualToString:@"1.0.0"]) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSURL *url = [NSURL URLWithString:@"https://mapbox.s3.amazonaws.com/mapbox-gl-native/ios/latest_version"];
|
||||
[[NSURLSession.sharedSession dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||
if (error || ((NSHTTPURLResponse *)response).statusCode != 200) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *latestVersion = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
latestVersion = [latestVersion stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||
if (![currentVersion isEqualToString:latestVersion]) {
|
||||
NSString *updateAvailable = [NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"SDK_UPDATE_AVAILABLE", nil, nil, @"Mapbox iOS SDK version %@ is now available:", @"Developer-only SDK update notification; {latest version, in format x.x.x}"), latestVersion];
|
||||
NSLog(@"%@ https://github.com/mapbox/mapbox-gl-native/releases/tag/ios-v%@", updateAvailable, latestVersion);
|
||||
}
|
||||
}] resume];
|
||||
#endif
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user