Updates mapbox-gl-native submodule to release-unicorn branch (#151)
* Update submodule * [ios] Ignore patches * Use new FileSourceManager interface * Remove filesource-files.json * Update submodule * Remove http_file_source.mm from this repo for clarity. * Adds set of MGLNativeNetworkManager (via MGLMapView and MGLOfflineStorage); includes tests. * - Create testing methods, so that we don't need to export MGLNativeNetworkManager in GL - Singleton accessors now set the delegate with each call; tests modified accordingly. * Add test for expected properties * [ios] Update MGLResourceTests for SKU changes Co-authored-by: Alexander Shalamov <alexander.shalamov@mapbox.com> Co-authored-by: Jordan Kiley <jmkiley@users.noreply.github.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -49,3 +49,4 @@ mapbox-gl-native.code-workspace
|
||||
/scripts/generate-file-lists.list
|
||||
/scripts/generate-shaders.list
|
||||
/scripts/generate-style-code.list
|
||||
*.patch
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"//": "This file can be edited manually and is the canonical source.",
|
||||
"sources": [
|
||||
"platform/darwin/src/MGLLoggingConfiguration.mm",
|
||||
"platform/darwin/src/MGLNetworkConfiguration.m",
|
||||
"platform/darwin/src/http_file_source.mm",
|
||||
"platform/default/src/mbgl/storage/file_source.cpp",
|
||||
"platform/default/src/mbgl/storage/sqlite3.cpp"
|
||||
],
|
||||
"public_headers": {},
|
||||
"private_headers": {}
|
||||
}
|
||||
@@ -7,7 +7,6 @@
|
||||
#import <mbgl/map/map_snapshotter.hpp>
|
||||
#import <mbgl/map/camera.hpp>
|
||||
#import <mbgl/storage/resource_options.hpp>
|
||||
#import <mbgl/storage/default_file_source.hpp>
|
||||
#import <mbgl/util/string.hpp>
|
||||
|
||||
#import "MGLOfflineStorage_Private.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#import "MGLNetworkConfiguration_Private.h"
|
||||
|
||||
#import "MGLNetworkIntegrationManager.h"
|
||||
#include <mbgl/storage/reachability.h>
|
||||
|
||||
static NSString * const MGLStartTime = @"start_time";
|
||||
@@ -34,9 +34,18 @@ NSString * const kMGLDownloadPerformanceEvent = @"mobile.performance_trace";
|
||||
_sharedManager = [[self alloc] init];
|
||||
});
|
||||
|
||||
[self setNativeNetworkManagerDelegateToDefault];
|
||||
|
||||
return _sharedManager;
|
||||
}
|
||||
|
||||
+ (void)setNativeNetworkManagerDelegateToDefault {
|
||||
// Tell core about our network integration. `delegate` here is not (yet)
|
||||
// intended to be set to nil, except for testing.
|
||||
[MGLNativeNetworkManager sharedManager].delegate =
|
||||
MGLNetworkIntegrationManager.sharedManager;
|
||||
}
|
||||
|
||||
- (void)setSessionConfiguration:(NSURLSessionConfiguration *)sessionConfiguration {
|
||||
@synchronized (self) {
|
||||
if (sessionConfiguration == nil) {
|
||||
@@ -160,3 +169,15 @@ NSString * const kMGLDownloadPerformanceEvent = @"mobile.performance_trace";
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MGLNetworkConfiguration (ForTesting)
|
||||
|
||||
+ (void)testing_clearNativeNetworkManagerDelegate {
|
||||
[MGLNativeNetworkManager sharedManager].delegate = nil;
|
||||
}
|
||||
|
||||
+ (id)testing_nativeNetworkManagerDelegate {
|
||||
return [MGLNativeNetworkManager sharedManager].delegate;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -16,10 +16,10 @@ extern NSString * const kMGLDownloadPerformanceEvent;
|
||||
@property (nonatomic, strong) NSMutableDictionary<NSString*, NSDictionary*> *events;
|
||||
@property (nonatomic, weak) id<MGLNetworkConfigurationMetricsDelegate> metricsDelegate;
|
||||
|
||||
+ (void)setNativeNetworkManagerDelegateToDefault;
|
||||
- (void)startDownloadEvent:(NSString *)urlString type:(NSString *)resourceType;
|
||||
- (void)stopDownloadEventForResponse:(NSURLResponse *)response;
|
||||
- (void)cancelDownloadEventForResponse:(NSURLResponse *)response;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#import "NSValue+MGLAdditions.h"
|
||||
|
||||
#include <mbgl/map/map_options.hpp>
|
||||
#include <mbgl/storage/default_file_source.hpp>
|
||||
#include <mbgl/storage/database_file_source.hpp>
|
||||
|
||||
const MGLExceptionName MGLInvalidOfflinePackException = @"MGLInvalidOfflinePackException";
|
||||
|
||||
@@ -59,7 +59,7 @@ private:
|
||||
|
||||
@implementation MGLOfflinePack {
|
||||
BOOL _isSuspending;
|
||||
std::shared_ptr<mbgl::DefaultFileSource> _mbglFileSource;
|
||||
std::shared_ptr<mbgl::DatabaseFileSource> _mbglDatabaseFileSource;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
@@ -76,8 +76,8 @@ private:
|
||||
_mbglOfflineRegion = region;
|
||||
_state = MGLOfflinePackStateUnknown;
|
||||
|
||||
_mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource];
|
||||
_mbglFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique<MBGLOfflineRegionObserver>(self));
|
||||
_mbglDatabaseFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglDatabaseFileSource];
|
||||
_mbglDatabaseFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique<MBGLOfflineRegionObserver>(self));
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -117,7 +117,7 @@ private:
|
||||
|
||||
self.state = MGLOfflinePackStateActive;
|
||||
|
||||
_mbglFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Active);
|
||||
_mbglDatabaseFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Active);
|
||||
}
|
||||
|
||||
- (void)suspend {
|
||||
@@ -129,7 +129,7 @@ private:
|
||||
_isSuspending = YES;
|
||||
}
|
||||
|
||||
_mbglFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Inactive);
|
||||
_mbglDatabaseFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Inactive);
|
||||
}
|
||||
|
||||
- (void)invalidate {
|
||||
@@ -140,7 +140,7 @@ private:
|
||||
@synchronized (self) {
|
||||
self.state = MGLOfflinePackStateInvalid;
|
||||
if (self.mbglOfflineRegion) {
|
||||
_mbglFileSource->setOfflineRegionObserver(*self.mbglOfflineRegion, nullptr);
|
||||
_mbglDatabaseFileSource->setOfflineRegionObserver(*self.mbglOfflineRegion, nullptr);
|
||||
}
|
||||
self.mbglOfflineRegion = nil;
|
||||
}
|
||||
@@ -169,7 +169,7 @@ private:
|
||||
MGLAssertOfflinePackIsValid();
|
||||
|
||||
__weak MGLOfflinePack *weakSelf = self;
|
||||
_mbglFileSource->getOfflineRegionStatus(*_mbglOfflineRegion, [&, weakSelf](mbgl::expected<mbgl::OfflineRegionStatus, std::exception_ptr> status) {
|
||||
_mbglDatabaseFileSource->getOfflineRegionStatus(*_mbglOfflineRegion, [&, weakSelf](mbgl::expected<mbgl::OfflineRegionStatus, std::exception_ptr> status) {
|
||||
if (status) {
|
||||
mbgl::OfflineRegionStatus checkedStatus = *status;
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#import "NSValue+MGLAdditions.h"
|
||||
#import "NSDate+MGLAdditions.h"
|
||||
#import "MGLLoggingConfiguration_Private.h"
|
||||
#import "MGLNetworkConfiguration_Private.h"
|
||||
|
||||
#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
|
||||
#import <MapboxMobileEvents/MapboxMobileEvents.h>
|
||||
@@ -19,7 +20,7 @@
|
||||
|
||||
#include <mbgl/actor/actor.hpp>
|
||||
#include <mbgl/actor/scheduler.hpp>
|
||||
#include <mbgl/storage/default_file_source.hpp>
|
||||
#include <mbgl/storage/file_source_manager.hpp>
|
||||
#include <mbgl/storage/resource_options.hpp>
|
||||
#include <mbgl/storage/resource_transform.hpp>
|
||||
#include <mbgl/util/chrono.hpp>
|
||||
@@ -45,13 +46,15 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
@interface MGLOfflineStorage ()
|
||||
|
||||
@property (nonatomic, strong, readwrite) NSMutableArray<MGLOfflinePack *> *packs;
|
||||
@property (nonatomic) std::shared_ptr<mbgl::DefaultFileSource> mbglFileSource;
|
||||
@property (nonatomic) std::shared_ptr<mbgl::DatabaseFileSource> mbglDatabaseFileSource;
|
||||
@property (nonatomic) std::shared_ptr<mbgl::OnlineFileSource> mbglOnlineFileSource;
|
||||
@property (nonatomic) std::shared_ptr<mbgl::FileSource> mbglFileSource;
|
||||
@property (nonatomic) std::string mbglCachePath;
|
||||
@property (nonatomic, getter=isPaused) BOOL paused;
|
||||
@end
|
||||
|
||||
@implementation MGLOfflineStorage {
|
||||
std::unique_ptr<mbgl::Actor<mbgl::ResourceTransform>> _mbglResourceTransform;
|
||||
std::unique_ptr<mbgl::Actor<mbgl::ResourceTransform::TransformCallback>> _mbglResourceTransform;
|
||||
}
|
||||
|
||||
+ (instancetype)sharedOfflineStorage {
|
||||
@@ -66,6 +69,9 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
[sharedOfflineStorage reloadPacks];
|
||||
});
|
||||
|
||||
// Always ensure the network delegate is setup
|
||||
[MGLNetworkConfiguration setNativeNetworkManagerDelegateToDefault];
|
||||
|
||||
return sharedOfflineStorage;
|
||||
}
|
||||
|
||||
@@ -91,7 +97,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
MGLLogDebug(@"Setting delegate: %@", newValue);
|
||||
_delegate = newValue;
|
||||
if ([self.delegate respondsToSelector:@selector(offlineStorage:URLForResourceOfKind:withURL:)]) {
|
||||
_mbglResourceTransform = std::make_unique<mbgl::Actor<mbgl::ResourceTransform>>(*mbgl::Scheduler::GetCurrent(), [offlineStorage = self](auto kind_, const std::string& url_) -> std::string {
|
||||
_mbglResourceTransform = std::make_unique<mbgl::Actor<mbgl::ResourceTransform::TransformCallback>>(*mbgl::Scheduler::GetCurrent(), [offlineStorage = self](auto kind_, const std::string& url_, mbgl::ResourceTransform::FinishedCallback cb) {
|
||||
NSURL* url =
|
||||
[NSURL URLWithString:[[NSString alloc] initWithBytes:url_.data()
|
||||
length:url_.length()
|
||||
@@ -127,13 +133,15 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
url = [offlineStorage.delegate offlineStorage:offlineStorage
|
||||
URLForResourceOfKind:kind
|
||||
withURL:url];
|
||||
return url.absoluteString.UTF8String;
|
||||
cb(url.absoluteString.UTF8String);
|
||||
});
|
||||
|
||||
_mbglFileSource->setResourceTransform(_mbglResourceTransform->self());
|
||||
_mbglOnlineFileSource->setResourceTransform({[actorRef = _mbglResourceTransform->self()](auto kind_, const std::string& url_, mbgl::ResourceTransform::FinishedCallback cb_){
|
||||
actorRef.invoke(&mbgl::ResourceTransform::TransformCallback::operator(), kind_, url_, std::move(cb_));
|
||||
}});
|
||||
} else {
|
||||
_mbglResourceTransform.reset();
|
||||
_mbglFileSource->setResourceTransform({});
|
||||
_mbglOnlineFileSource->setResourceTransform({});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,6 +212,10 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
// Ensure network configuration & appropriate delegate prior to starting the
|
||||
// run loop
|
||||
[MGLNetworkConfiguration setNativeNetworkManagerDelegateToDefault];
|
||||
|
||||
MGLInitializeRunLoop();
|
||||
|
||||
if (self = [super init]) {
|
||||
@@ -228,7 +240,9 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
mbgl::ResourceOptions options;
|
||||
options.withCachePath(_mbglCachePath)
|
||||
.withAssetPath([NSBundle mainBundle].resourceURL.path.UTF8String);
|
||||
_mbglFileSource = std::static_pointer_cast<mbgl::DefaultFileSource>(mbgl::FileSource::getSharedFileSource(options));
|
||||
_mbglFileSource = mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::ResourceLoader, options);
|
||||
_mbglOnlineFileSource = std::static_pointer_cast<mbgl::OnlineFileSource>(mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Network, options));
|
||||
_mbglDatabaseFileSource = std::static_pointer_cast<mbgl::DatabaseFileSource>(mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Database, options));
|
||||
|
||||
// Observe for changes to the API base URL (and find out the current one).
|
||||
[[MGLAccountManager sharedManager] addObserver:self
|
||||
@@ -262,14 +276,14 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
if ([keyPath isEqualToString:@"accessToken"] && object == [MGLAccountManager sharedManager]) {
|
||||
NSString *accessToken = change[NSKeyValueChangeNewKey];
|
||||
if (![accessToken isKindOfClass:[NSNull class]]) {
|
||||
_mbglFileSource->setAccessToken(accessToken.UTF8String);
|
||||
_mbglOnlineFileSource->setProperty(mbgl::ACCESS_TOKEN_KEY, accessToken.UTF8String);
|
||||
}
|
||||
} else if ([keyPath isEqualToString:@"apiBaseURL"] && object == [MGLAccountManager sharedManager]) {
|
||||
NSURL *apiBaseURL = change[NSKeyValueChangeNewKey];
|
||||
if ([apiBaseURL isKindOfClass:[NSNull class]]) {
|
||||
_mbglFileSource->setAPIBaseURL(mbgl::util::API_BASE_URL);
|
||||
_mbglFileSource->setProperty(mbgl::API_BASE_URL_KEY, mbgl::util::API_BASE_URL);
|
||||
} else {
|
||||
_mbglFileSource->setAPIBaseURL(apiBaseURL.absoluteString.UTF8String);
|
||||
_mbglFileSource->setProperty(mbgl::API_BASE_URL_KEY, apiBaseURL.absoluteString.UTF8String);
|
||||
}
|
||||
} else {
|
||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
||||
@@ -335,7 +349,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
}
|
||||
|
||||
- (void)_addContentsOfFile:(NSString *)filePath withCompletionHandler:(void (^)(NSArray<MGLOfflinePack *> * _Nullable packs, NSError * _Nullable error))completion {
|
||||
_mbglFileSource->mergeOfflineRegions(std::string(static_cast<const char *>([filePath UTF8String])), [&, completion, filePath](mbgl::expected<mbgl::OfflineRegions, std::exception_ptr> result) {
|
||||
_mbglDatabaseFileSource->mergeOfflineRegions(std::string(static_cast<const char *>([filePath UTF8String])), [&, completion, filePath](mbgl::expected<mbgl::OfflineRegions, std::exception_ptr> result) {
|
||||
NSError *error;
|
||||
NSMutableArray *packs;
|
||||
if (!result) {
|
||||
@@ -400,7 +414,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
const mbgl::OfflineRegionDefinition regionDefinition = [(id <MGLOfflineRegion_Private>)region offlineRegionDefinition];
|
||||
mbgl::OfflineRegionMetadata metadata(context.length);
|
||||
[context getBytes:&metadata[0] length:metadata.size()];
|
||||
_mbglFileSource->createOfflineRegion(regionDefinition, metadata, [&, completion](mbgl::expected<mbgl::OfflineRegion, std::exception_ptr> mbglOfflineRegion) {
|
||||
_mbglDatabaseFileSource->createOfflineRegion(regionDefinition, metadata, [&, completion](mbgl::expected<mbgl::OfflineRegion, std::exception_ptr> mbglOfflineRegion) {
|
||||
NSError *error;
|
||||
if (!mbglOfflineRegion) {
|
||||
NSString *errorDescription = @(mbgl::util::toString(mbglOfflineRegion.error()).c_str());
|
||||
@@ -441,7 +455,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
return;
|
||||
}
|
||||
|
||||
_mbglFileSource->deleteOfflineRegion(std::move(*mbglOfflineRegion), [&, completion](std::exception_ptr exception) {
|
||||
_mbglDatabaseFileSource->deleteOfflineRegion(std::move(*mbglOfflineRegion), [&, completion](std::exception_ptr exception) {
|
||||
NSError *error;
|
||||
if (exception) {
|
||||
error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{
|
||||
@@ -468,7 +482,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
return;
|
||||
}
|
||||
|
||||
_mbglFileSource->invalidateOfflineRegion(region, [&](std::exception_ptr exception) {
|
||||
_mbglDatabaseFileSource->invalidateOfflineRegion(region, [&](std::exception_ptr exception) {
|
||||
if (exception) {
|
||||
error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{
|
||||
NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()),
|
||||
@@ -496,7 +510,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
}
|
||||
|
||||
- (void)getPacksWithCompletionHandler:(void (^)(NSArray<MGLOfflinePack *> *packs, NSError * _Nullable error))completion {
|
||||
_mbglFileSource->listOfflineRegions([&, completion](mbgl::expected<mbgl::OfflineRegions, std::exception_ptr> result) {
|
||||
_mbglDatabaseFileSource->listOfflineRegions([&, completion](mbgl::expected<mbgl::OfflineRegions, std::exception_ptr> result) {
|
||||
NSError *error;
|
||||
NSMutableArray *packs;
|
||||
if (!result) {
|
||||
@@ -524,13 +538,13 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
|
||||
- (void)setMaximumAllowedMapboxTiles:(uint64_t)maximumCount {
|
||||
MGLLogDebug(@"Setting maximumAllowedMapboxTiles: %lu", (unsigned long)maximumCount);
|
||||
_mbglFileSource->setOfflineMapboxTileCountLimit(maximumCount);
|
||||
_mbglDatabaseFileSource->setOfflineMapboxTileCountLimit(maximumCount);
|
||||
}
|
||||
|
||||
#pragma mark - Ambient Cache management
|
||||
|
||||
- (void)setMaximumAmbientCacheSize:(NSUInteger)cacheSize withCompletionHandler:(void (^)(NSError * _Nullable))completion {
|
||||
_mbglFileSource->setMaximumAmbientCacheSize(cacheSize, [&, completion](std::exception_ptr exception) {
|
||||
_mbglDatabaseFileSource->setMaximumAmbientCacheSize(cacheSize, [&, completion](std::exception_ptr exception) {
|
||||
NSError *error;
|
||||
if (completion) {
|
||||
if (exception) {
|
||||
@@ -549,7 +563,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
}
|
||||
|
||||
- (void)invalidateAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable))completion {
|
||||
_mbglFileSource->invalidateAmbientCache([&, completion](std::exception_ptr exception){
|
||||
_mbglDatabaseFileSource->invalidateAmbientCache([&, completion](std::exception_ptr exception){
|
||||
NSError *error;
|
||||
if (completion) {
|
||||
if (exception) {
|
||||
@@ -569,7 +583,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
}
|
||||
|
||||
- (void)clearAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion {
|
||||
_mbglFileSource->clearAmbientCache([&, completion](std::exception_ptr exception){
|
||||
_mbglDatabaseFileSource->clearAmbientCache([&, completion](std::exception_ptr exception){
|
||||
NSError *error;
|
||||
if (completion) {
|
||||
if (exception) {
|
||||
@@ -588,7 +602,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
}
|
||||
|
||||
- (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion {
|
||||
_mbglFileSource->resetDatabase([&, completion](std::exception_ptr exception) {
|
||||
_mbglDatabaseFileSource->resetDatabase([&, completion](std::exception_ptr exception) {
|
||||
NSError *error;
|
||||
if (completion) {
|
||||
if (exception) {
|
||||
@@ -636,7 +650,7 @@ const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegio
|
||||
response.expires = mbgl::Timestamp() + std::chrono::duration_cast<mbgl::Seconds>(MGLDurationFromTimeInterval(expires.timeIntervalSince1970));
|
||||
}
|
||||
|
||||
_mbglFileSource->put(resource, response);
|
||||
_mbglDatabaseFileSource->put(resource, response);
|
||||
}
|
||||
|
||||
- (void)putResourceWithUrl:(NSURL *)url data:(NSData *)data modified:(nullable NSDate *)modified expires:(nullable NSDate *)expires etag:(nullable NSString *)etag mustRevalidate:(BOOL)mustRevalidate {
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
#import "MGLOfflinePack.h"
|
||||
|
||||
#include <mbgl/storage/default_file_source.hpp>
|
||||
#include <mbgl/storage/online_file_source.hpp>
|
||||
#include <mbgl/storage/database_file_source.hpp>
|
||||
|
||||
#include <memory>
|
||||
|
||||
@@ -11,9 +12,19 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@interface MGLOfflineStorage (Private)
|
||||
|
||||
/**
|
||||
The shared file source object owned by the shared offline storage object.
|
||||
The shared database file source object owned by the shared offline storage object.
|
||||
*/
|
||||
@property (nonatomic) std::shared_ptr<mbgl::DefaultFileSource> mbglFileSource;
|
||||
@property (nonatomic) std::shared_ptr<mbgl::DatabaseFileSource> mbglDatabaseFileSource;
|
||||
|
||||
/**
|
||||
The shared online file source object owned by the shared offline storage object.
|
||||
*/
|
||||
@property (nonatomic) std::shared_ptr<mbgl::OnlineFileSource> mbglOnlineFileSource;
|
||||
|
||||
/**
|
||||
The shared resource loader file source object owned by the shared offline storage object.
|
||||
*/
|
||||
@property (nonatomic) std::shared_ptr<mbgl::FileSource> mbglFileSource;
|
||||
|
||||
/**
|
||||
The shared offline cache path.
|
||||
|
||||
@@ -1,380 +0,0 @@
|
||||
#include <mbgl/storage/http_file_source.hpp>
|
||||
#include <mbgl/storage/resource.hpp>
|
||||
#include <mbgl/storage/response.hpp>
|
||||
|
||||
#include <mbgl/util/http_header.hpp>
|
||||
#include <mbgl/util/async_task.hpp>
|
||||
#include <mbgl/util/version.hpp>
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MGLLoggingConfiguration_Private.h"
|
||||
#import "MGLNetworkConfiguration_Private.h"
|
||||
|
||||
#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
|
||||
#import "MGLAccountManager_Private.h"
|
||||
#endif
|
||||
|
||||
#include <mutex>
|
||||
#include <chrono>
|
||||
|
||||
@interface MBGLBundleCanary : NSObject
|
||||
@end
|
||||
|
||||
@implementation MBGLBundleCanary
|
||||
@end
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
// Data that is shared between the requesting thread and the thread running the completion handler.
|
||||
class HTTPRequestShared {
|
||||
public:
|
||||
HTTPRequestShared(Response& response_, util::AsyncTask& async_)
|
||||
: response(response_),
|
||||
async(async_) {
|
||||
}
|
||||
|
||||
void notify(const Response& response_) {
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
if (!cancelled) {
|
||||
response = response_;
|
||||
async.send();
|
||||
}
|
||||
}
|
||||
|
||||
void cancel() {
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
cancelled = true;
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex mutex;
|
||||
bool cancelled = false;
|
||||
|
||||
Response& response;
|
||||
util::AsyncTask& async;
|
||||
};
|
||||
|
||||
class HTTPRequest : public AsyncRequest {
|
||||
public:
|
||||
HTTPRequest(FileSource::Callback callback_)
|
||||
: shared(std::make_shared<HTTPRequestShared>(response, async)),
|
||||
callback(callback_) {
|
||||
}
|
||||
|
||||
~HTTPRequest() override {
|
||||
shared->cancel();
|
||||
if (task) {
|
||||
[task cancel];
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<HTTPRequestShared> shared;
|
||||
NSURLSessionDataTask* task = nil;
|
||||
|
||||
private:
|
||||
FileSource::Callback callback;
|
||||
Response response;
|
||||
|
||||
util::AsyncTask async { [this] {
|
||||
// Calling `callback` may result in deleting `this`. Copy data to temporaries first.
|
||||
auto callback_ = callback;
|
||||
auto response_ = response;
|
||||
callback_(response_);
|
||||
} };
|
||||
};
|
||||
|
||||
class HTTPFileSource::Impl {
|
||||
public:
|
||||
Impl() {
|
||||
@autoreleasepool {
|
||||
NSURLSessionConfiguration *sessionConfig = [MGLNetworkConfiguration sharedManager].sessionConfiguration;
|
||||
session = [NSURLSession sessionWithConfiguration:sessionConfig];
|
||||
|
||||
userAgent = getUserAgent();
|
||||
|
||||
#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
|
||||
accountType = [[NSUserDefaults standardUserDefaults] integerForKey:MGLMapboxAccountTypeKey];
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
NSURLSession* session = nil;
|
||||
NSString* userAgent = nil;
|
||||
NSInteger accountType = 0;
|
||||
|
||||
private:
|
||||
NSString* getUserAgent() const;
|
||||
NSBundle* getSDKBundle() const;
|
||||
};
|
||||
|
||||
NSString *HTTPFileSource::Impl::getUserAgent() const {
|
||||
NSMutableArray *userAgentComponents = [NSMutableArray array];
|
||||
|
||||
NSBundle *appBundle = [NSBundle mainBundle];
|
||||
if (appBundle) {
|
||||
NSString *appName = appBundle.infoDictionary[@"CFBundleName"];
|
||||
[userAgentComponents addObject:[NSString stringWithFormat:@"%@/%@",
|
||||
appName.length ? appName : appBundle.infoDictionary[@"CFBundleIdentifier"],
|
||||
appBundle.infoDictionary[@"CFBundleShortVersionString"]]];
|
||||
} else {
|
||||
[userAgentComponents addObject:[NSProcessInfo processInfo].processName];
|
||||
}
|
||||
|
||||
NSBundle *sdkBundle = HTTPFileSource::Impl::getSDKBundle();
|
||||
if (sdkBundle) {
|
||||
NSString *versionString = sdkBundle.infoDictionary[@"MGLSemanticVersionString"];
|
||||
if (!versionString) {
|
||||
versionString = sdkBundle.infoDictionary[@"CFBundleShortVersionString"];
|
||||
}
|
||||
if (versionString) {
|
||||
[userAgentComponents addObject:[NSString stringWithFormat:@"%@/%@",
|
||||
sdkBundle.infoDictionary[@"CFBundleName"], versionString]];
|
||||
}
|
||||
}
|
||||
|
||||
// Avoid %s here because it inserts hidden bidirectional markers on macOS when the system
|
||||
// language is set to a right-to-left language.
|
||||
[userAgentComponents addObject:[NSString stringWithFormat:@"MapboxGL/0.0.0 (%@)",
|
||||
@(mbgl::version::revision)]];
|
||||
|
||||
NSString *systemName = @"Darwin";
|
||||
#if TARGET_OS_IPHONE
|
||||
systemName = @"iOS";
|
||||
#elif TARGET_OS_MAC
|
||||
systemName = @"macOS";
|
||||
#elif TARGET_OS_WATCH
|
||||
systemName = @"watchOS";
|
||||
#elif TARGET_OS_TV
|
||||
systemName = @"tvOS";
|
||||
#endif
|
||||
#if TARGET_OS_SIMULATOR
|
||||
systemName = [systemName stringByAppendingString:@" Simulator"];
|
||||
#endif
|
||||
NSString *systemVersion = nil;
|
||||
if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)]) {
|
||||
NSOperatingSystemVersion osVersion = [NSProcessInfo processInfo].operatingSystemVersion;
|
||||
systemVersion = [NSString stringWithFormat:@"%ld.%ld.%ld",
|
||||
(long)osVersion.majorVersion, (long)osVersion.minorVersion, (long)osVersion.patchVersion];
|
||||
}
|
||||
if (systemVersion) {
|
||||
[userAgentComponents addObject:[NSString stringWithFormat:@"%@/%@", systemName, systemVersion]];
|
||||
}
|
||||
|
||||
NSString *cpu = nil;
|
||||
#if TARGET_CPU_X86
|
||||
cpu = @"x86";
|
||||
#elif TARGET_CPU_X86_64
|
||||
cpu = @"x86_64";
|
||||
#elif TARGET_CPU_ARM
|
||||
cpu = @"arm";
|
||||
#elif TARGET_CPU_ARM64
|
||||
cpu = @"arm64";
|
||||
#endif
|
||||
if (cpu) {
|
||||
[userAgentComponents addObject:[NSString stringWithFormat:@"(%@)", cpu]];
|
||||
}
|
||||
|
||||
return [userAgentComponents componentsJoinedByString:@" "];
|
||||
}
|
||||
|
||||
NSBundle *HTTPFileSource::Impl::getSDKBundle() const {
|
||||
NSBundle *bundle = [NSBundle bundleForClass:[MBGLBundleCanary class]];
|
||||
if (bundle && ![bundle.infoDictionary[@"CFBundlePackageType"] isEqualToString:@"FMWK"]) {
|
||||
// For static frameworks, the class is contained in the application bundle rather than the
|
||||
// framework bundle.
|
||||
bundle = [NSBundle bundleWithPath:[bundle.privateFrameworksPath
|
||||
stringByAppendingPathComponent:@"Mapbox.framework"]];
|
||||
}
|
||||
return bundle;
|
||||
}
|
||||
|
||||
HTTPFileSource::HTTPFileSource()
|
||||
: impl(std::make_unique<Impl>()) {
|
||||
}
|
||||
|
||||
HTTPFileSource::~HTTPFileSource() = default;
|
||||
|
||||
MGL_EXPORT
|
||||
BOOL isValidMapboxEndpoint(NSURL *url) {
|
||||
return ([url.host isEqualToString:@"mapbox.com"] ||
|
||||
[url.host hasSuffix:@".mapbox.com"] ||
|
||||
[url.host isEqualToString:@"mapbox.cn"] ||
|
||||
[url.host hasSuffix:@".mapbox.cn"]);
|
||||
}
|
||||
|
||||
MGL_EXPORT
|
||||
NSURL *resourceURLWithAccountType(const Resource& resource, NSInteger accountType) {
|
||||
|
||||
NSURL *url = [NSURL URLWithString:@(resource.url.c_str())];
|
||||
|
||||
#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
|
||||
if (accountType == 0 && isValidMapboxEndpoint(url)) {
|
||||
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
|
||||
NSMutableArray *queryItems = [NSMutableArray array];
|
||||
|
||||
if (resource.usage == Resource::Usage::Offline) {
|
||||
[queryItems addObject:[NSURLQueryItem queryItemWithName:@"offline" value:@"true"]];
|
||||
} else {
|
||||
// Only add SKU token to requests not tagged as "offline" usage.
|
||||
[queryItems addObject:[NSURLQueryItem queryItemWithName:@"sku" value:MGLAccountManager.skuToken]];
|
||||
}
|
||||
|
||||
if (components.queryItems) {
|
||||
[queryItems addObjectsFromArray:components.queryItems];
|
||||
}
|
||||
|
||||
components.queryItems = queryItems;
|
||||
url = components.URL;
|
||||
}
|
||||
#else
|
||||
(void)accountType;
|
||||
#endif
|
||||
return url;
|
||||
}
|
||||
|
||||
std::unique_ptr<AsyncRequest> HTTPFileSource::request(const Resource& resource, Callback callback) {
|
||||
auto request = std::make_unique<HTTPRequest>(callback);
|
||||
auto shared = request->shared; // Explicit copy so that it also gets copied into the completion handler block below.
|
||||
|
||||
@autoreleasepool {
|
||||
NSURL *url = resourceURLWithAccountType(resource, impl->accountType);
|
||||
MGLLogDebug(@"Requesting URI: %@", url.relativePath);
|
||||
|
||||
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
|
||||
if (resource.priorEtag) {
|
||||
[req addValue:@(resource.priorEtag->c_str())
|
||||
forHTTPHeaderField:@"If-None-Match"];
|
||||
} else if (resource.priorModified) {
|
||||
[req addValue:@(util::rfc1123(*resource.priorModified).c_str())
|
||||
forHTTPHeaderField:@"If-Modified-Since"];
|
||||
}
|
||||
|
||||
[req addValue:impl->userAgent forHTTPHeaderField:@"User-Agent"];
|
||||
|
||||
const bool isTile = resource.kind == mbgl::Resource::Kind::Tile;
|
||||
|
||||
if (isTile) {
|
||||
[[MGLNetworkConfiguration sharedManager] startDownloadEvent:url.relativePath type:@"tile"];
|
||||
}
|
||||
|
||||
request->task = [impl->session
|
||||
dataTaskWithRequest:req
|
||||
completionHandler:^(NSData* data, NSURLResponse* res, NSError* error) {
|
||||
if (error && [error code] == NSURLErrorCancelled) {
|
||||
[[MGLNetworkConfiguration sharedManager] cancelDownloadEventForResponse:res];
|
||||
return;
|
||||
}
|
||||
[[MGLNetworkConfiguration sharedManager] stopDownloadEventForResponse:res];
|
||||
Response response;
|
||||
using Error = Response::Error;
|
||||
|
||||
if (error) {
|
||||
MGLLogError(@"Requesting: %@ failed with error: %@", res.URL.relativePath, error);
|
||||
|
||||
if (data) {
|
||||
response.data =
|
||||
std::make_shared<std::string>((const char*)[data bytes], [data length]);
|
||||
}
|
||||
|
||||
switch ([error code]) {
|
||||
case NSURLErrorBadServerResponse: // 5xx errors
|
||||
response.error = std::make_unique<Error>(
|
||||
Error::Reason::Server, [[error localizedDescription] UTF8String]);
|
||||
break;
|
||||
|
||||
case NSURLErrorNetworkConnectionLost:
|
||||
case NSURLErrorCannotFindHost:
|
||||
case NSURLErrorCannotConnectToHost:
|
||||
case NSURLErrorDNSLookupFailed:
|
||||
case NSURLErrorNotConnectedToInternet:
|
||||
case NSURLErrorInternationalRoamingOff:
|
||||
case NSURLErrorCallIsActive:
|
||||
case NSURLErrorDataNotAllowed:
|
||||
case NSURLErrorTimedOut:
|
||||
response.error = std::make_unique<Error>(
|
||||
Error::Reason::Connection, [[error localizedDescription] UTF8String]);
|
||||
break;
|
||||
|
||||
default:
|
||||
response.error = std::make_unique<Error>(
|
||||
Error::Reason::Other, [[error localizedDescription] UTF8String]);
|
||||
break;
|
||||
}
|
||||
} else if ([res isKindOfClass:[NSHTTPURLResponse class]]) {
|
||||
const long responseCode = [(NSHTTPURLResponse *)res statusCode];
|
||||
MGLLogDebug(@"Requesting %@ returned responseCode: %lu", res.URL.relativePath, responseCode);
|
||||
|
||||
NSDictionary *headers = [(NSHTTPURLResponse *)res allHeaderFields];
|
||||
NSString *cache_control = [headers objectForKey:@"Cache-Control"];
|
||||
if (cache_control) {
|
||||
const auto cc = http::CacheControl::parse([cache_control UTF8String]);
|
||||
response.expires = cc.toTimePoint();
|
||||
response.mustRevalidate = cc.mustRevalidate;
|
||||
}
|
||||
|
||||
NSString *expires = [headers objectForKey:@"Expires"];
|
||||
if (expires) {
|
||||
response.expires = util::parseTimestamp([expires UTF8String]);
|
||||
}
|
||||
|
||||
NSString *last_modified = [headers objectForKey:@"Last-Modified"];
|
||||
if (last_modified) {
|
||||
response.modified = util::parseTimestamp([last_modified UTF8String]);
|
||||
}
|
||||
|
||||
NSString *etag = [headers objectForKey:@"ETag"];
|
||||
if (etag) {
|
||||
response.etag = std::string([etag UTF8String]);
|
||||
}
|
||||
|
||||
if (responseCode == 200) {
|
||||
response.data = std::make_shared<std::string>((const char *)[data bytes], [data length]);
|
||||
} else if (responseCode == 204 || (responseCode == 404 && isTile)) {
|
||||
response.noContent = true;
|
||||
} else if (responseCode == 304) {
|
||||
response.notModified = true;
|
||||
} else if (responseCode == 404) {
|
||||
response.error =
|
||||
std::make_unique<Error>(Error::Reason::NotFound, "HTTP status code 404");
|
||||
} else if (responseCode == 429) {
|
||||
// Get the standard header
|
||||
optional<std::string> retryAfter;
|
||||
NSString *retryAfterHeader = headers[@"Retry-After"];
|
||||
if (retryAfterHeader) {
|
||||
retryAfter = std::string([retryAfterHeader UTF8String]);
|
||||
}
|
||||
|
||||
// Fallback mapbox specific header
|
||||
optional<std::string> xRateLimitReset;
|
||||
NSString *xReset = headers[@"x-rate-limit-reset"];
|
||||
if (xReset) {
|
||||
xRateLimitReset = std::string([xReset UTF8String]);
|
||||
}
|
||||
|
||||
response.error = std::make_unique<Error>(Error::Reason::RateLimit, "HTTP status code 429", http::parseRetryHeaders(retryAfter, xRateLimitReset));
|
||||
} else if (responseCode >= 500 && responseCode < 600) {
|
||||
response.error =
|
||||
std::make_unique<Error>(Error::Reason::Server, std::string{ "HTTP status code " } +
|
||||
std::to_string(responseCode));
|
||||
} else {
|
||||
response.error =
|
||||
std::make_unique<Error>(Error::Reason::Other, std::string{ "HTTP status code " } +
|
||||
std::to_string(responseCode));
|
||||
}
|
||||
} else {
|
||||
// This should never happen.
|
||||
response.error = std::make_unique<Error>(Error::Reason::Other,
|
||||
"Response class is not NSHTTPURLResponse");
|
||||
}
|
||||
|
||||
shared->notify(response);
|
||||
}];
|
||||
|
||||
[request->task resume];
|
||||
}
|
||||
|
||||
return std::move(request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
#import "NSDate+MGLAdditions.h"
|
||||
#import "MGLTestAssertionHandler.h"
|
||||
|
||||
#include <mbgl/storage/resource.hpp>
|
||||
#include <mbgl/util/run_loop.hpp>
|
||||
|
||||
#pragma clang diagnostic ignored "-Wshadow"
|
||||
|
||||
@@ -73,13 +73,12 @@ namespace mbgl {
|
||||
for (NSURLQueryItem *item in components.queryItems) {
|
||||
if (([item.name isEqualToString:@"offline"] && [item.value isEqualToString:@"true"]) ||
|
||||
([item.name isEqualToString:@"a"] && [item.value isEqualToString:@"one"]) ||
|
||||
([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"])) {
|
||||
([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"]) || [item.name isEqualToString:@"sku"]) {
|
||||
foundCount++;
|
||||
}
|
||||
XCTAssertFalse([item.name isEqualToString:@"sku"]);
|
||||
}
|
||||
|
||||
XCTAssert(foundCount == 3);
|
||||
XCTAssert(foundCount == 4);
|
||||
#else
|
||||
// NOTE: Currently the macOS SDK does not supply the sku or offline query parameters
|
||||
for (NSURLQueryItem *item in components.queryItems) {
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
#import <XCTest/XCTest.h>
|
||||
#import "MGLNetworkIntegrationManager.h"
|
||||
#import "MGLNetworkConfiguration.h"
|
||||
#import "MGLNetworkConfiguration_Private.h"
|
||||
#import "MGLOfflineStorage_Private.h"
|
||||
#import "MGLMapView.h"
|
||||
#import "MGLFoundation_Private.h"
|
||||
|
||||
@interface MGLNetworkConfiguration (Testing)
|
||||
+ (void)testing_clearNativeNetworkManagerDelegate;
|
||||
+ (id)testing_nativeNetworkManagerDelegate;
|
||||
@end
|
||||
|
||||
@interface MGLNetworkConfigurationIntegrationTests : XCTestCase
|
||||
@end
|
||||
|
||||
#define ASSERT_DELEGATE_IS_NIL() \
|
||||
XCTAssertNil([MGLNetworkConfiguration testing_nativeNetworkManagerDelegate])
|
||||
|
||||
#define ASSERT_DELEGATE_IS_NOT_NIL() \
|
||||
XCTAssertNotNil([MGLNetworkConfiguration testing_nativeNetworkManagerDelegate])
|
||||
|
||||
// NOTE: These tests are currently assumed to run in this specific order.
|
||||
@implementation MGLNetworkConfigurationIntegrationTests
|
||||
|
||||
- (void)setUp {
|
||||
[super setUp];
|
||||
|
||||
// Reset before each test
|
||||
[MGLNetworkConfiguration testing_clearNativeNetworkManagerDelegate];
|
||||
}
|
||||
|
||||
- (void)test1_NativeNetworkManagerDelegateIsSet
|
||||
{
|
||||
ASSERT_DELEGATE_IS_NIL();
|
||||
[MGLNetworkConfiguration setNativeNetworkManagerDelegateToDefault];
|
||||
|
||||
id delegate = [MGLNetworkConfiguration testing_nativeNetworkManagerDelegate];
|
||||
|
||||
id<MGLNativeNetworkDelegate> manager = MGL_OBJC_DYNAMIC_CAST_AS_PROTOCOL(delegate, MGLNativeNetworkDelegate);
|
||||
XCTAssertNotNil(manager);
|
||||
|
||||
// Expected properties
|
||||
XCTAssertNotNil([manager skuToken]);
|
||||
XCTAssertNotNil([manager sessionConfiguration]);
|
||||
}
|
||||
|
||||
- (void)test2_NativeNetworkManagerDelegateIsSetBySharedManager
|
||||
{
|
||||
ASSERT_DELEGATE_IS_NIL();
|
||||
|
||||
// Just calling the shared manager is also sufficient (even though, it's a
|
||||
// singleton and created with a dispatch_once, the delegate is re-set for
|
||||
// each call.
|
||||
[MGLNetworkConfiguration sharedManager];
|
||||
ASSERT_DELEGATE_IS_NOT_NIL();
|
||||
}
|
||||
|
||||
- (void)test3_NativeNetworkManagerDelegateIsSetBySharedOfflineStorage
|
||||
{
|
||||
ASSERT_DELEGATE_IS_NIL();
|
||||
|
||||
// Similar to `[MGLNetworkConfiguration sharedManager]`,
|
||||
// `[MGLOfflineStorage sharedOfflineStorage]` also sets the delegate.
|
||||
[MGLOfflineStorage sharedOfflineStorage];
|
||||
ASSERT_DELEGATE_IS_NOT_NIL();
|
||||
}
|
||||
|
||||
- (void)test4_NativeNetworkManagerDelegateIsSetBySharedOfflineStorageASecondTime
|
||||
{
|
||||
// Testing a second time...
|
||||
ASSERT_DELEGATE_IS_NIL();
|
||||
[MGLOfflineStorage sharedOfflineStorage];
|
||||
ASSERT_DELEGATE_IS_NOT_NIL();
|
||||
}
|
||||
|
||||
- (void)test5_NativeNetworkManagerDelegateIsSetByMapViewInit
|
||||
{
|
||||
ASSERT_DELEGATE_IS_NIL();
|
||||
(void)[[MGLMapView alloc] init];
|
||||
ASSERT_DELEGATE_IS_NOT_NIL();
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -384,7 +384,6 @@
|
||||
9C6E282D22A9815D0056B7BE /* MGLMapboxEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E282922A980E50056B7BE /* MGLMapboxEvents.h */; };
|
||||
9C6E282F22A9824B0056B7BE /* MGLTelemetryConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = AC518DFD201BB55A00EBC820 /* MGLTelemetryConfig.h */; };
|
||||
9C6E283022A9824F0056B7BE /* MGLMapboxEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E282922A980E50056B7BE /* MGLMapboxEvents.h */; };
|
||||
A490C46D23C688CD009AC158 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A490C46B23C688CC009AC158 /* MGLNetworkIntegrationManager.m */; };
|
||||
A4DE3DCB23038C98005B3473 /* MGLMockGestureRecognizers.h in Sources */ = {isa = PBXBuildFile; fileRef = A4DE3DCA23038A7F005B3473 /* MGLMockGestureRecognizers.h */; };
|
||||
A4DE3DCC23038CCA005B3473 /* MGLMockGestureRecognizers.m in Sources */ = {isa = PBXBuildFile; fileRef = A4DE3DC823038A07005B3473 /* MGLMockGestureRecognizers.m */; };
|
||||
A4F3FB1D2254865900A30170 /* missing_icon.json in Resources */ = {isa = PBXBuildFile; fileRef = A4F3FB1C2254865900A30170 /* missing_icon.json */; };
|
||||
@@ -400,6 +399,11 @@
|
||||
CA0FAA08237B3BC600C9F3C9 /* MapboxMobileEvents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA96299B23731199004F1330 /* MapboxMobileEvents.framework */; };
|
||||
CA0FAA09237B3BEA00C9F3C9 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; };
|
||||
CA0FAA0A237B3BEA00C9F3C9 /* MapboxMobileEvents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA96299B23731199004F1330 /* MapboxMobileEvents.framework */; };
|
||||
CA17464923D81581008B7A43 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A490C46B23C688CC009AC158 /* MGLNetworkIntegrationManager.m */; };
|
||||
CA17464A23D81587008B7A43 /* MGLNetworkIntegrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A490C46C23C688CC009AC158 /* MGLNetworkIntegrationManager.h */; };
|
||||
CA17464B23D81589008B7A43 /* MGLNetworkIntegrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A490C46C23C688CC009AC158 /* MGLNetworkIntegrationManager.h */; };
|
||||
CA17464C23D81595008B7A43 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A490C46B23C688CC009AC158 /* MGLNetworkIntegrationManager.m */; };
|
||||
CA17464E23D8A93C008B7A43 /* MGLNetworkConfigurationIntegrationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA17464D23D8A93C008B7A43 /* MGLNetworkConfigurationIntegrationTests.mm */; };
|
||||
CA1B4A512099FB2200EDD491 /* MGLMapSnapshotterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1B4A502099FB2200EDD491 /* MGLMapSnapshotterTest.m */; };
|
||||
CA4C54FE2324948100A81659 /* MGLSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4C54FD2324948100A81659 /* MGLSourceTests.swift */; };
|
||||
CA4EB8C720863487006AB465 /* MGLStyleLayerIntegrationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4EB8C620863487006AB465 /* MGLStyleLayerIntegrationTests.m */; };
|
||||
@@ -1051,6 +1055,7 @@
|
||||
CA0C27952076CA50001CE5B7 /* MGLMapViewIntegrationTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLMapViewIntegrationTest.h; sourceTree = "<group>"; };
|
||||
CA0FA9BB2375EBE700C9F3C9 /* MapboxMobileEvents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MapboxMobileEvents.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CA0FA9BE2375EC3200C9F3C9 /* MapboxMobileEvents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MapboxMobileEvents.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CA17464D23D8A93C008B7A43 /* MGLNetworkConfigurationIntegrationTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLNetworkConfigurationIntegrationTests.mm; sourceTree = "<group>"; };
|
||||
CA1B4A502099FB2200EDD491 /* MGLMapSnapshotterTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapSnapshotterTest.m; sourceTree = "<group>"; };
|
||||
CA4C54FD2324948100A81659 /* MGLSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MGLSourceTests.swift; sourceTree = "<group>"; };
|
||||
CA4EB8C620863487006AB465 /* MGLStyleLayerIntegrationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLStyleLayerIntegrationTests.m; sourceTree = "<group>"; };
|
||||
@@ -1432,6 +1437,7 @@
|
||||
077061D9215DA00E000FEF62 /* MGLTestLocationManager.m */,
|
||||
CA4F3BDD230F74C3008BAFEA /* MGLMapViewPendingBlockTests.m */,
|
||||
CA4C54FD2324948100A81659 /* MGLSourceTests.swift */,
|
||||
CA17464D23D8A93C008B7A43 /* MGLNetworkConfigurationIntegrationTests.mm */,
|
||||
);
|
||||
path = "Integration Tests";
|
||||
sourceTree = "<group>";
|
||||
@@ -2299,6 +2305,7 @@
|
||||
DA27C24F1CBB4C11000B0ECD /* MGLAccountManager_Private.h in Headers */,
|
||||
DA8847FC1CBAFA5100AB86E3 /* MGLStyle.h in Headers */,
|
||||
DD9BE4F71EB263C50079A3AF /* UIViewController+MGLAdditions.h in Headers */,
|
||||
CA17464A23D81587008B7A43 /* MGLNetworkIntegrationManager.h in Headers */,
|
||||
DAF0D8131DFE0EC500B28378 /* MGLVectorTileSource_Private.h in Headers */,
|
||||
354B83961D2E873E005D9406 /* MGLUserLocationAnnotationView.h in Headers */,
|
||||
74CB5EC3219B282500102936 /* MGLCircleStyleLayer_Private.h in Headers */,
|
||||
@@ -2462,6 +2469,7 @@
|
||||
1F6A82A92138871900BA5B41 /* MGLLoggingConfiguration_Private.h in Headers */,
|
||||
DABFB8661CBE99E500D62B32 /* MGLPointAnnotation.h in Headers */,
|
||||
96E6145A22CC169000109F14 /* MGLCompassButton.h in Headers */,
|
||||
CA17464B23D81589008B7A43 /* MGLNetworkIntegrationManager.h in Headers */,
|
||||
96E516E42000560B00A02306 /* MGLComputedShapeSource_Private.h in Headers */,
|
||||
96E516E92000560B00A02306 /* MGLAnnotationImage_Private.h in Headers */,
|
||||
96E516E52000560B00A02306 /* MGLOfflinePack_Private.h in Headers */,
|
||||
@@ -2958,6 +2966,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
CA17464E23D8A93C008B7A43 /* MGLNetworkConfigurationIntegrationTests.mm in Sources */,
|
||||
CA4EB8C720863487006AB465 /* MGLStyleLayerIntegrationTests.m in Sources */,
|
||||
CA7766842229C11A0008DE9E /* SMCalloutView.m in Sources */,
|
||||
16376B0A1FFD9DAF0000563E /* MBGLIntegrationTests.mm in Sources */,
|
||||
@@ -2992,7 +3001,6 @@
|
||||
files = (
|
||||
DA1DC9971CB6E046006E619F /* main.m in Sources */,
|
||||
354B839C1D2E9B48005D9406 /* MBXUserLocationAnnotationView.m in Sources */,
|
||||
A490C46D23C688CD009AC158 /* MGLNetworkIntegrationManager.m in Sources */,
|
||||
965DF51120F9430500438AAC /* MBXFrameTimeGraphView.m in Sources */,
|
||||
DA1DC9991CB6E054006E619F /* MBXAppDelegate.m in Sources */,
|
||||
6FA9341721EF372100AA9CA8 /* MBXOrnamentsViewController.m in Sources */,
|
||||
@@ -3088,6 +3096,7 @@
|
||||
DAD165701CF41981001FF4B9 /* MGLFeature.mm in Sources */,
|
||||
30E578191DAA855E0050F07E /* UIImage+MGLAdditions.mm in Sources */,
|
||||
550570C622958FB400228ECF /* MGLMapView+Impl.mm in Sources */,
|
||||
CA17464923D81581008B7A43 /* MGLNetworkIntegrationManager.m in Sources */,
|
||||
40EDA1C11CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */,
|
||||
DA8848541CBAFB9800AB86E3 /* MGLCompactCalloutView.m in Sources */,
|
||||
DA8848251CBAFA6200AB86E3 /* MGLPointAnnotation.mm in Sources */,
|
||||
@@ -3187,6 +3196,7 @@
|
||||
DAD165711CF41981001FF4B9 /* MGLFeature.mm in Sources */,
|
||||
30E5781A1DAA855E0050F07E /* UIImage+MGLAdditions.mm in Sources */,
|
||||
40EDA1C21CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */,
|
||||
CA17464C23D81595008B7A43 /* MGLNetworkIntegrationManager.m in Sources */,
|
||||
550570C722958FB400228ECF /* MGLMapView+Impl.mm in Sources */,
|
||||
DAA4E4291CBB730400178DFB /* NSBundle+MGLAdditions.m in Sources */,
|
||||
35136D3D1D42272500C20EFD /* MGLCircleStyleLayer.mm in Sources */,
|
||||
@@ -3498,21 +3508,6 @@
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/platform/default/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/variant/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geometry.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/value/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geojson.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/optional",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/typewrapper/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/weak/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/rapidjson/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/expected-lite/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/polylabel/include",
|
||||
"$(PROJECT_DIR)/../../platform/darwin/include",
|
||||
);
|
||||
INFOPLIST_FILE = "Integration Tests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.integration-tests";
|
||||
@@ -3543,21 +3538,6 @@
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/platform/default/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/variant/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geometry.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/value/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geojson.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/optional",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/typewrapper/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/weak/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/rapidjson/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/expected-lite/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/polylabel/include",
|
||||
"$(PROJECT_DIR)/../../platform/darwin/include",
|
||||
);
|
||||
INFOPLIST_FILE = "Integration Tests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.integration-tests";
|
||||
@@ -3762,21 +3742,6 @@
|
||||
baseConfigurationReference = CAE5AE2B2389FBF000E4A5A1 /* common.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/platform/default/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/variant/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geometry.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/value/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geojson.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/optional",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/typewrapper/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/weak/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/rapidjson/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/expected-lite/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/polylabel/include",
|
||||
"$(PROJECT_DIR)/../../platform/darwin/include",
|
||||
);
|
||||
INFOPLIST_FILE = test/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
OTHER_CFLAGS = "-fvisibility=hidden";
|
||||
@@ -3816,21 +3781,6 @@
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/platform/default/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/variant/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geometry.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/value/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geojson.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/optional",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/typewrapper/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/weak/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/rapidjson/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/expected-lite/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/polylabel/include",
|
||||
"$(PROJECT_DIR)/../../platform/darwin/include",
|
||||
);
|
||||
INFOPLIST_FILE = "Integration Tests/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.integration-tests";
|
||||
@@ -3945,21 +3895,6 @@
|
||||
baseConfigurationReference = CAE5AE2B2389FBF000E4A5A1 /* common.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/platform/default/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/variant/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geometry.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/value/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geojson.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/optional",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/typewrapper/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/weak/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/rapidjson/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/expected-lite/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/polylabel/include",
|
||||
"$(PROJECT_DIR)/../../platform/darwin/include",
|
||||
);
|
||||
INFOPLIST_FILE = test/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
OTHER_CFLAGS = "-fvisibility=hidden";
|
||||
@@ -3987,21 +3922,6 @@
|
||||
baseConfigurationReference = CAE5AE2B2389FBF000E4A5A1 /* common.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/platform/default/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/variant/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geometry.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/value/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/geojson.hpp/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/optional",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/typewrapper/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/mapbox/weak/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/rapidjson/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/mapbox-base/extras/expected-lite/include",
|
||||
"$(PROJECT_DIR)/../../vendor/mapbox-gl-native/vendor/polylabel/include",
|
||||
"$(PROJECT_DIR)/../../platform/darwin/include",
|
||||
);
|
||||
INFOPLIST_FILE = test/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
OTHER_CFLAGS = "-fvisibility=hidden";
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
#import "MGLMapAccessibilityElement.h"
|
||||
#import "MGLLocationManager_Private.h"
|
||||
#import "MGLLoggingConfiguration_Private.h"
|
||||
#import "MGLNetworkConfiguration_Private.h"
|
||||
#import <MapboxMobileEvents/MapboxMobileEvents.h>
|
||||
|
||||
#include <algorithm>
|
||||
@@ -452,6 +453,10 @@ public:
|
||||
// setup accessibility
|
||||
//
|
||||
// self.isAccessibilityElement = YES;
|
||||
|
||||
// Ensure network configuration is set up
|
||||
[MGLNetworkConfiguration setNativeNetworkManagerDelegateToDefault];
|
||||
|
||||
self.accessibilityLabel = NSLocalizedStringWithDefaultValue(@"MAP_A11Y_LABEL", nil, nil, @"Map", @"Accessibility label");
|
||||
self.accessibilityTraits = UIAccessibilityTraitAllowsDirectInteraction | UIAccessibilityTraitAdjustable;
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
|
||||
2
vendor/mapbox-gl-native
vendored
2
vendor/mapbox-gl-native
vendored
Submodule vendor/mapbox-gl-native updated: 86a3605349...d85ce77deb
Reference in New Issue
Block a user