summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2016-03-07 14:55:44 -0800
committerMinh Nguyễn <mxn@1ec5.org>2016-03-08 17:43:07 -0800
commit48cec8b74445cebf0db1ef896bebe79ad10c4e94 (patch)
tree9a66f8e645e4dfad29ff11d9e4ce09915e0969c2
parentf74900e7046d31721cc4b3e0c0678e85a989cf12 (diff)
downloadqtlocation-mapboxgl-ios-v3.1.3-fabric.1.tar.gz
[ios] Non-embedded static frameworkios-v3.1.3-fabric.1ios-v3.1.2+fabric.1
Added a new ifabric Make target for packaging up a static framework similar to the one released as 3.0.1. Place artwork and certificate assets inside Mapbox.bundle inside Mapbox.framework. Link SystemConfiguration in the umbrella header. Distinguish between the framework bundle and the resources bundle. For the dynamic frameworks and embedded static frameworks, the two are the same; for the non-embedded static framework, the latter resides inside the former. Cherry-picked from c2cd9335e9c9ff599cd84723eada6a503d1e5c80.
-rw-r--r--Makefile1
-rw-r--r--ios/framework/Mapbox-static.h2
-rwxr-xr-xplatform/ios/scripts/package.sh40
-rw-r--r--platform/ios/src/MGLAccountManager.m4
-rw-r--r--platform/ios/src/MGLMapView.mm3
-rw-r--r--platform/ios/src/MGLMapboxEvents.m8
-rw-r--r--platform/ios/src/NSBundle+MGLAdditions.h9
-rw-r--r--platform/ios/src/NSBundle+MGLAdditions.m25
-rw-r--r--platform/osx/src/MGLMapView.mm2
9 files changed, 71 insertions, 23 deletions
diff --git a/Makefile b/Makefile
index c66e2b007a..694010d016 100644
--- a/Makefile
+++ b/Makefile
@@ -53,6 +53,7 @@ ipackage: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=$(FORMAT) BUILD_DE
ipackage-strip: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=$(FORMAT) BUILD_DEVICE=$(BUILD_DEVICE) SYMBOLS=NO ./platform/ios/scripts/package.sh
ipackage-sim: Xcode/ios ; @JOBS=$(JOBS) BUILDTYPE=Debug BITCODE=$(BITCODE) FORMAT=dynamic BUILD_DEVICE=false SYMBOLS=$(SYMBOLS) ./platform/ios/scripts/package.sh
iframework: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=dynamic BUILD_DEVICE=$(BUILD_DEVICE) SYMBOLS=$(SYMBOLS) ./platform/ios/scripts/package.sh
+ifabric: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=$(FORMAT) BUILD_DEVICE=$(BUILD_DEVICE) SYMBOLS=NO BUNDLE_RESOURCES=YES ./platform/ios/scripts/package.sh
itest: ipackage-sim ; ./platform/ios/scripts/test.sh
idocument: ; OUTPUT=$(OUTPUT) ./platform/ios/scripts/document.sh
diff --git a/ios/framework/Mapbox-static.h b/ios/framework/Mapbox-static.h
index d3674b0b61..864a3fd5b6 100644
--- a/ios/framework/Mapbox-static.h
+++ b/ios/framework/Mapbox-static.h
@@ -1,3 +1,5 @@
#import <GLKit/GLKit.h>
#import <ImageIO/ImageIO.h>
#import <MobileCoreServices/MobileCoreServices.h>
+#import <QuartzCore/QuartzCore.h>
+#import <SystemConfiguration/SystemConfiguration.h>
diff --git a/platform/ios/scripts/package.sh b/platform/ios/scripts/package.sh
index 4a964d4346..582da2b699 100755
--- a/platform/ios/scripts/package.sh
+++ b/platform/ios/scripts/package.sh
@@ -21,13 +21,19 @@ elif [[ ${FORMAT} == "dynamic" ]]; then
BUILD_STATIC=false
fi
+BUNDLE_RESOURCES=${BUNDLE_RESOURCES:-}
+BUNDLE_PATH=
+if [[ ${BUNDLE_RESOURCES} ]]; then
+ BUNDLE_PATH="/${NAME}.bundle"
+fi
+
SDK=iphonesimulator
if [[ ${BUILD_FOR_DEVICE} == true ]]; then
SDK=iphoneos
fi
IOS_SDK_VERSION=`xcrun --sdk ${SDK} --show-sdk-version`
-echo "Configuring ${FORMAT:-dynamic and static} ${BUILDTYPE} framework for ${SDK}; symbols: ${GCC_GENERATE_DEBUGGING_SYMBOLS}; Bitcode: ${ENABLE_BITCODE}"
+echo "Configuring ${FORMAT:-dynamic and static} ${BUILDTYPE} framework for ${SDK}; symbols: ${GCC_GENERATE_DEBUGGING_SYMBOLS}; Bitcode: ${ENABLE_BITCODE}; Mapbox.bundle: ${BUNDLE_RESOURCES}"
function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; }
function finish { >&2 echo -en "\033[0m"; }
@@ -195,18 +201,28 @@ fi
step "Copying library resources…"
SEM_VERSION=$( git describe --tags --match=ios-v*.*.* --abbrev=0 | sed 's/^ios-v//' )
SHORT_VERSION=${SEM_VERSION%-*}
-cp -pv LICENSE.md "${OUTPUT}"
-cp -rv ios/app/Settings.bundle "${OUTPUT}"
+if [[ ${BUNDLE_RESOURCES} ]]; then
+ cp -pv LICENSE.md "${OUTPUT}/static/${NAME}.framework"
+ cp -rv ios/app/Settings.bundle "${OUTPUT}/static/${NAME}.framework"
+else
+ cp -pv LICENSE.md "${OUTPUT}"
+ cp -rv ios/app/Settings.bundle "${OUTPUT}"
+fi
if [[ ${BUILD_STATIC} == true ]]; then
- cp -pv platform/ios/resources/* "${OUTPUT}/static/${NAME}.framework"
- cp -pv ios/framework/Info.plist "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace CFBundleExecutable -string ${NAME} "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace CFBundleIdentifier -string com.mapbox.sdk.ios "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace CFBundleName -string ${NAME} "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace CFBundleShortVersionString -string "${SHORT_VERSION}" "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace CFBundleVersion -string ${PROJ_VERSION} "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace MGLSemanticVersionString -string "${SEM_VERSION}" "${OUTPUT}/static/${NAME}.framework/Info.plist"
- plutil -replace MGLCommitHash -string "${HASH}" "${OUTPUT}/static/${NAME}.framework/Info.plist"
+ mkdir -p "${OUTPUT}/static/${NAME}.framework${BUNDLE_PATH}"
+ cp -pv platform/ios/resources/* "${OUTPUT}/static/${NAME}.framework${BUNDLE_PATH}"
+ INFO_PLIST_PATH="${OUTPUT}/static/${NAME}.framework/Info.plist"
+ cp -pv ios/framework/Info.plist "${INFO_PLIST_PATH}"
+ plutil -replace CFBundleExecutable -string ${NAME} "${INFO_PLIST_PATH}"
+ plutil -replace CFBundleIdentifier -string com.mapbox.sdk.ios "${INFO_PLIST_PATH}"
+ plutil -replace CFBundleName -string ${NAME} "${INFO_PLIST_PATH}"
+ plutil -replace CFBundleShortVersionString -string "${SHORT_VERSION}" "${INFO_PLIST_PATH}"
+ plutil -replace CFBundleVersion -string ${PROJ_VERSION} "${INFO_PLIST_PATH}"
+ plutil -replace MGLSemanticVersionString -string "${SEM_VERSION}" "${INFO_PLIST_PATH}"
+ plutil -replace MGLCommitHash -string "${HASH}" "${INFO_PLIST_PATH}"
+ if [[ ${BUNDLE_RESOURCES} ]]; then
+ cp -pv "${INFO_PLIST_PATH}" "${OUTPUT}/static/${NAME}.framework${BUNDLE_PATH}/Info.plist"
+ fi
mkdir "${OUTPUT}/static/${NAME}.framework/Modules"
cp -pv ios/framework/modulemap "${OUTPUT}/static/${NAME}.framework/Modules/module.modulemap"
fi
diff --git a/platform/ios/src/MGLAccountManager.m b/platform/ios/src/MGLAccountManager.m
index 6b98d5286a..d50f0f86de 100644
--- a/platform/ios/src/MGLAccountManager.m
+++ b/platform/ios/src/MGLAccountManager.m
@@ -73,11 +73,11 @@
#pragma mark - Fabric
+ (NSString *)bundleIdentifier {
- return [NSBundle mgl_frameworkBundle].bundleIdentifier;
+ return [NSBundle mgl_frameworkBundleIdentifier];
}
+ (NSString *)kitDisplayVersion {
- return [NSBundle mgl_frameworkBundle].infoDictionary[@"CFBundleShortVersionString"];
+ return [NSBundle mgl_frameworkInfoDictionary][@"CFBundleShortVersionString"];
}
+ (void)initializeIfNeeded {
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 83904f168f..cddeaf4bb9 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -3841,7 +3841,8 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
NSString *extension = imageName.pathExtension.length ? imageName.pathExtension : @"png";
NSBundle *bundle = [NSBundle mgl_frameworkBundle];
NSString *path = [bundle pathForResource:imageName.stringByDeletingPathExtension
- ofType:extension];
+ ofType:extension
+ inDirectory:bundle.mgl_resourcesDirectory];
if ( ! path)
{
[NSException raise:@"Resource not found" format:
diff --git a/platform/ios/src/MGLMapboxEvents.m b/platform/ios/src/MGLMapboxEvents.m
index 567b0c3c90..bfd8267def 100644
--- a/platform/ios/src/MGLMapboxEvents.m
+++ b/platform/ios/src/MGLMapboxEvents.m
@@ -220,20 +220,20 @@ const NSTimeInterval MGLFlushInterval = 60;
_paused = YES;
[self resumeMetricsCollection];
- NSBundle *resourceBundle = [NSBundle mgl_frameworkBundle];
+ NSBundle *frameworkBundle = [NSBundle mgl_frameworkBundle];
// Load Local Copy of Server's Public Key
NSString *cerPath = nil;
- cerPath = [resourceBundle pathForResource:@"api_mapbox_com-geotrust" ofType:@"der"];
+ cerPath = [frameworkBundle pathForResource:@"api_mapbox_com-geotrust" ofType:@"der" inDirectory:frameworkBundle.mgl_resourcesDirectory];
if (cerPath != nil) {
_geoTrustCert = [NSData dataWithContentsOfFile:cerPath];
}
- cerPath = [resourceBundle pathForResource:@"api_mapbox_com-digicert" ofType:@"der"];
+ cerPath = [frameworkBundle pathForResource:@"api_mapbox_com-digicert" ofType:@"der" inDirectory:frameworkBundle.mgl_resourcesDirectory];
if (cerPath != nil) {
_digicertCert = [NSData dataWithContentsOfFile:cerPath];
}
- cerPath = [resourceBundle pathForResource:@"star_tilestream_net" ofType:@"der"];
+ cerPath = [frameworkBundle pathForResource:@"star_tilestream_net" ofType:@"der" inDirectory:frameworkBundle.mgl_resourcesDirectory];
if (cerPath != nil) {
_testServerCert = [NSData dataWithContentsOfFile:cerPath];
}
diff --git a/platform/ios/src/NSBundle+MGLAdditions.h b/platform/ios/src/NSBundle+MGLAdditions.h
index 6d6ebc35ad..52ef7fbfa7 100644
--- a/platform/ios/src/NSBundle+MGLAdditions.h
+++ b/platform/ios/src/NSBundle+MGLAdditions.h
@@ -8,8 +8,17 @@ void mgl_linkBundleCategory();
@interface NSBundle (MGLAdditions)
+/// Returns the bundle containing the SDK’s classes and Info.plist file.
+ (instancetype)mgl_frameworkBundle;
++ (nullable NSString *)mgl_frameworkBundleIdentifier;
+
++ (nullable NS_DICTIONARY_OF(NSString *, id) *)mgl_frameworkInfoDictionary;
+
+/// The relative path to the directory containing the SDK’s resource files, or
+/// `nil` if the files are located directly within the bundle’s root directory.
+@property (readonly, copy, nullable) NSString *mgl_resourcesDirectory;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/platform/ios/src/NSBundle+MGLAdditions.m b/platform/ios/src/NSBundle+MGLAdditions.m
index 868b4ff8e6..e1f3e7c720 100644
--- a/platform/ios/src/NSBundle+MGLAdditions.m
+++ b/platform/ios/src/NSBundle+MGLAdditions.m
@@ -6,10 +6,9 @@ void mgl_linkBundleCategory() {}
@implementation NSBundle (MGLAdditions)
-+ (instancetype)mgl_frameworkBundle
-{
++ (instancetype)mgl_frameworkBundle {
NSBundle *bundle = [self bundleForClass:[MGLAccountManager class]];
- if (![bundle.infoDictionary[@"CFBundlePackageType"] isEqualToString:@"FMWK"]) {
+ if (![bundle.infoDictionary[@"CFBundlePackageType"] isEqualToString:@"FMWK"] && !bundle.mgl_resourcesDirectory) {
// For static frameworks, the bundle is the containing application
// bundle but the resources are still in the framework bundle.
bundle = [NSBundle bundleWithPath:[bundle.privateFrameworksPath
@@ -18,4 +17,24 @@ void mgl_linkBundleCategory() {}
return bundle;
}
++ (nullable NSString *)mgl_frameworkBundleIdentifier {
+ return self.mgl_frameworkInfoDictionary[@"CFBundleIdentifier"];
+}
+
++ (nullable NS_DICTIONARY_OF(NSString *, id) *)mgl_frameworkInfoDictionary {
+ NSBundle *bundle = self.mgl_frameworkBundle;
+ if (bundle.mgl_resourcesDirectory) {
+ NSString *infoPlistPath = [bundle pathForResource:@"Info"
+ ofType:@"plist"
+ inDirectory:bundle.mgl_resourcesDirectory];
+ return [NSDictionary dictionaryWithContentsOfFile:infoPlistPath];
+ } else {
+ return bundle.infoDictionary;
+ }
+}
+
+- (NSString *)mgl_resourcesDirectory {
+ return [self pathForResource:@"Mapbox" ofType:@"bundle"] ? @"Mapbox.bundle" : nil;
+}
+
@end
diff --git a/platform/osx/src/MGLMapView.mm b/platform/osx/src/MGLMapView.mm
index ca282facdb..cd299ff32d 100644
--- a/platform/osx/src/MGLMapView.mm
+++ b/platform/osx/src/MGLMapView.mm
@@ -92,7 +92,7 @@ typedef std::map<MGLAnnotationTag, MGLAnnotationContext> MGLAnnotationContextMap
/// Returns an NSImage for the default marker image.
NSImage *MGLDefaultMarkerImage() {
NSString *path = [[NSBundle mgl_frameworkBundle] pathForResource:MGLDefaultStyleMarkerSymbolName
- ofType:@"pdf"];
+ ofType:@"pdf"];
return [[NSImage alloc] initWithContentsOfFile:path];
}