diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6abe3f5..bf618fd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,8 +13,7 @@ stages: build_project: stage: build script: - - xcodebuild build -project MVMCore/MVMCore.xcodeproj -scheme FatLibrary | xcpretty - - BUILD_DIR=$(xcodebuild -showBuildSettings -project MVMCore/MVMCore.xcodeproj | grep BUILD_DIR) + - xcodebuild build -project MVMCore/MVMCore.xcodeproj -scheme FatLibrary only: - branches - develop diff --git a/MVMCore/MVMCore.xcodeproj/project.pbxproj b/MVMCore/MVMCore.xcodeproj/project.pbxproj index 73291ae..7529847 100644 --- a/MVMCore/MVMCore.xcodeproj/project.pbxproj +++ b/MVMCore/MVMCore.xcodeproj/project.pbxproj @@ -818,7 +818,7 @@ 8876D5C01FB50A9E00EB2E3D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1010; + LastUpgradeCheck = 1320; ORGANIZATIONNAME = myverizon; TargetAttributes = { 8876D5C81FB50A9E00EB2E3D = { @@ -876,7 +876,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "unset TOOLCHAINS #Xcode 7.3 BUG FIX http://stackoverflow.com/questions/36184930/xcodebuild-7-3-cant-enable-bitcode\n\n# define output folder environment variable\nC_PROJECT_NAME=\"MVMCore\"\nPHONE_CONFIGURATION=\"Release\"\nSIMULATOR_CONFIGURATION=\"Debug\"\nSIMULATOR_LIBRARY_PATH=\"${BUILD_DIR}/${SIMULATOR_CONFIGURATION}-iphonesimulator/${C_PROJECT_NAME}\"\nUNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/universal\n\nxcodebuild archive \\\n -scheme \"${C_PROJECT_NAME}\" \\\n -configuration ${PHONE_CONFIGURATION} \\\n -archivePath \"${BUILD_DIR}/${PHONE_CONFIGURATION}-iphoneos/${C_PROJECT_NAME}\" \\\n -sdk iphoneos \\\n -destination 'generic/platform=iOS' \\\n SKIP_INSTALL=NO\n \n exit 0\n\nxcodebuild archive \\\n -scheme \"${C_PROJECT_NAME}\" \\\n -configuration ${SIMULATOR_CONFIGURATION} \\\n -archivePath \"${SIMULATOR_LIBRARY_PATH}\" \\\n -sdk iphonesimulator \\\n -destination 'generic/platform=iOS Simulator' \\\n SKIP_INSTALL=NO\n\n\n\n\n# Step 1. Build Device and Simulator versions\nxcodebuild -scheme \"${C_PROJECT_NAME}\" ONLY_ACTIVE_ARCH=NO -configuration ${PHONE_CONFIGURATION} -sdk iphoneos -archivePath \"${BUILD_DIR}/${PHONE_CONFIGURATION}-iphoneos/${C_PROJECT_NAME}\" archive SKIP_INSTALL=false\n\nxcodebuild -target \"${C_PROJECT_NAME}\" ONLY_ACTIVE_ARCH=NO -configuration ${SIMULATOR_CONFIGURATION} -sdk iphonesimulator -arch x86_64 BUILD_DIR=\"${BUILD_DIR}\" ALWAYS_SEARCH_USER_PATHS=true\n\nmkdir -p \"${UNIVERSAL_OUTPUTFOLDER}\"\n\nrm -rf ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.framework\ncp -R ${BUILD_DIR}/${PHONE_CONFIGURATION}-iphoneos/\"${C_PROJECT_NAME}\".xcarchive/Products/Library/Frameworks/${C_PROJECT_NAME}.framework ${UNIVERSAL_OUTPUTFOLDER}\n\n# Step 2. Create universal binary file using lipo\nlipo -create -output \"${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}\" \"${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}\" \"${SIMULATOR_LIBRARY_PATH}/${C_PROJECT_NAME}\"\n\nmv ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME} ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.framework/${C_PROJECT_NAME}\n\n# For Swift framework, Swiftmodule needs to be copied in the universal framework\nif [ -d \"${SIMULATOR_LIBRARY_PATH}/Modules/${C_PROJECT_NAME}.swiftmodule/\" ]; then\ncp -a \"${SIMULATOR_LIBRARY_PATH}/Modules/${C_PROJECT_NAME}.swiftmodule/\" \"${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.framework/Modules/${C_PROJECT_NAME}.swiftmodule/\"\nfi\n"; + shellScript = "unset TOOLCHAINS #Xcode 7.3 BUG FIX http://stackoverflow.com/questions/36184930/xcodebuild-7-3-cant-enable-bitcode\n\n# define output folder environment variable\nC_PROJECT_NAME=\"MVMCore\"\nPHONE_CONFIGURATION=\"Release\"\nPHONE_ARCHIVE_PATH=\"${BUILD_DIR}/${PHONE_CONFIGURATION}-iphoneos/${C_PROJECT_NAME}.xcarchive\"\nSIMULATOR_CONFIGURATION=\"Debug\"\nSIMULATOR_ARCHIVE_PATH=\"${BUILD_DIR}/${SIMULATOR_CONFIGURATION}-iphonesimulator/${C_PROJECT_NAME}.xcarchive\"\nUNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/universal\n\n# Build device archive\nxcodebuild archive \\\n -scheme \"${C_PROJECT_NAME}\" \\\n -configuration ${PHONE_CONFIGURATION} \\\n -archivePath \"${PHONE_ARCHIVE_PATH}\" \\\n -sdk iphoneos \\\n -destination 'generic/platform=iOS' \\\n SKIP_INSTALL=NO \\\n ONLY_ACTIVE_ARCH=NO\n \n# Build simulator archive\nxcodebuild archive \\\n -scheme \"${C_PROJECT_NAME}\" \\\n -configuration ${SIMULATOR_CONFIGURATION} \\\n -archivePath \"${SIMULATOR_ARCHIVE_PATH}\" \\\n -sdk iphonesimulator \\\n -destination 'generic/platform=iOS Simulator' \\\n SKIP_INSTALL=NO \\\n ONLY_ACTIVE_ARCH=NO\n\nmkdir -p \"${UNIVERSAL_OUTPUTFOLDER}\"\n\n# Remove any existing xc framework.\nrm -rf ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.xcframework\n\n# Create the xcframework in the universal output folder.\nxcodebuild -create-xcframework \\\n -framework \"${PHONE_ARCHIVE_PATH}/Products/Library/Frameworks/${C_PROJECT_NAME}.framework\" \\\n -framework \"${SIMULATOR_ARCHIVE_PATH}/Products/Library/Frameworks/${C_PROJECT_NAME}.framework\" \\\n -output ${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.xcframework\n\n# Copy the dSYM file as well.\nditto \"${PHONE_ARCHIVE_PATH}/dSYMs/${C_PROJECT_NAME}.framework.dSYM\" \"${UNIVERSAL_OUTPUTFOLDER}/${C_PROJECT_NAME}.xcframework.dSYM\"\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -1003,7 +1003,9 @@ 8876D5CF1FB50A9E00EB2E3D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1026,6 +1028,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1052,8 +1055,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1063,7 +1067,9 @@ 8876D5D01FB50A9E00EB2E3D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1086,6 +1092,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1106,8 +1113,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; @@ -1131,10 +1139,10 @@ FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../../SharedFrameworks"; INFOPLIST_FILE = MVMCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 2.0; + MARKETING_VERSION = 3.0; PRODUCT_BUNDLE_IDENTIFIER = com.vzw.MVMCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -1159,10 +1167,10 @@ FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../../SharedFrameworks"; INFOPLIST_FILE = MVMCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = "$(inherited)"; - MARKETING_VERSION = 2.0; + MARKETING_VERSION = 3.0; PRODUCT_BUNDLE_IDENTIFIER = com.vzw.MVMCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; diff --git a/MVMCore/MVMCore.xcodeproj/xcshareddata/xcschemes/MVMCore.xcscheme b/MVMCore/MVMCore.xcodeproj/xcshareddata/xcschemes/MVMCore.xcscheme index 6decab4..aa9aebf 100644 --- a/MVMCore/MVMCore.xcodeproj/xcshareddata/xcschemes/MVMCore.xcscheme +++ b/MVMCore/MVMCore.xcodeproj/xcshareddata/xcschemes/MVMCore.xcscheme @@ -1,6 +1,6 @@ - - - - #import @interface MVMCoreDismissViewControllerOperation : MVMCoreOperation diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationHandler.m b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationHandler.m index a88076e..4fcfb68 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationHandler.m +++ b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationHandler.m @@ -18,6 +18,7 @@ #import "MVMCoreLoggingHandler.h" #import "MVMCoreLoadingOverlayHandler.h" #import "MVMCoreDispatchUtility.h" +#import @interface MVMCoreNavigationHandler () @@ -311,7 +312,7 @@ - (void)presentViewController:(nonnull UIViewController *)viewController animated:(BOOL)animated delegate:(nullable NSObject*)delegate completionHandler:(nullable void (^)(void))completionBlock { [MVMCoreDispatchUtility performBlockOnMainThread:^{ - UIViewController *controllerToPresentOn = self.viewControllerToPresentOn ?: [UIApplication sharedApplication].keyWindow.rootViewController; + UIViewController *controllerToPresentOn = self.viewControllerToPresentOn ?: [MVMCoreGetterUtility getKeyWindow].rootViewController; if (!controllerToPresentOn) { // Log if we are attempting to add an alert to nothing. MVMCoreErrorObject *error = [[MVMCoreErrorObject alloc] initWithTitle:nil message:@"The viewControllerToPresent on property is nil and an attempt was made to present." code:ErrorCodeNoViewControllerToPresentOn domain:ErrorDomainNative location:[NSString stringWithFormat:@"ViewController:%@|Delegate:%@",viewController.description,delegate]]; @@ -328,7 +329,7 @@ - (void)dismissTopViewControllerAnimated:(BOOL)animated delegate:(nullable NSObject*)delegate completionHandler:(nullable void (^)(void))completionBlock { [MVMCoreDispatchUtility performBlockOnMainThread:^{ // Dismiss on the main navigation controller. - UIViewController *controllerToPresentOn = self.viewControllerToPresentOn ?: [UIApplication sharedApplication].keyWindow.rootViewController; + UIViewController *controllerToPresentOn = self.viewControllerToPresentOn ?: [MVMCoreGetterUtility getKeyWindow].rootViewController; MVMCoreDismissViewControllerOperation *operation = [[MVMCoreDismissViewControllerOperation alloc] initAndDismissTopViewController:controllerToPresentOn animated:animated]; operation.completionBlock = completionBlock; [[NSOperationQueue mainQueue] addOperation:operation]; @@ -345,7 +346,7 @@ - (void)dismissToBottom:(BOOL)animated delegate:(nullable NSObject*)delegate completionHandler:(nullable void (^)(void))completionBlock { [MVMCoreDispatchUtility performBlockOnMainThread:^{ // Dismiss on the main navigation controller. - UIViewController *controllerToPresentOn = self.viewControllerToPresentOn ?: [UIApplication sharedApplication].keyWindow.rootViewController; + UIViewController *controllerToPresentOn = self.viewControllerToPresentOn ?: [MVMCoreGetterUtility getKeyWindow].rootViewController; MVMCoreDismissViewControllerOperation *operation = [[MVMCoreDismissViewControllerOperation alloc] initAndDismissViewController:controllerToPresentOn animated:animated]; operation.completionBlock = completionBlock; [[NSOperationQueue mainQueue] addOperation:operation]; diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.h b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.h index 349c00c..d3f8722 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.h +++ b/MVMCore/MVMCore/PresentationHandling/MVMCoreNavigationOperation.h @@ -8,8 +8,8 @@ // Handles navigation #import -#import "MVMCoreOperation.h" -#import "MVMCorePresentationDelegateProtocol.h" +#import +#import @class MVMCoreNavigationObject; diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentAnimationOperation.h b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentAnimationOperation.h index fa9e862..4a73872 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentAnimationOperation.h +++ b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentAnimationOperation.h @@ -7,8 +7,8 @@ // // Should be added to the main queue. Presents the view controller on the presenting view controller. -#import "MVMCoreOperation.h" -#import "MVMCorePresentationDelegateProtocol.h" +#import +#import @interface MVMCorePresentAnimationOperation : MVMCoreOperation diff --git a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentViewControllerOperation.h b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentViewControllerOperation.h index 7906638..1556a1c 100644 --- a/MVMCore/MVMCore/PresentationHandling/MVMCorePresentViewControllerOperation.h +++ b/MVMCore/MVMCore/PresentationHandling/MVMCorePresentViewControllerOperation.h @@ -8,8 +8,8 @@ // An operation for presenting a view controller. Depends on alert as well. Should NOT go onto the main queue. #import -#import "MVMCoreOperation.h" -#import "MVMCorePresentationDelegateProtocol.h" +#import +#import @interface MVMCorePresentViewControllerOperation : MVMCoreOperation diff --git a/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility+Extension.swift b/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility+Extension.swift index c5a6854..42b3ce5 100644 --- a/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility+Extension.swift +++ b/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility+Extension.swift @@ -25,3 +25,10 @@ public extension MVMCoreGetterUtility { return (abs((a) - (b)) < threshold) } } + +@objc public extension MVMCoreGetterUtility { + /// Returns the key window. + @objc class func getKeyWindow() -> UIWindow? { + UIApplication.shared.connectedScenes.flatMap { ($0 as? UIWindowScene)?.windows ?? [] }.first { $0.isKeyWindow } + } +} diff --git a/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility.m b/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility.m index c5a8570..4d5127e 100644 --- a/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility.m +++ b/MVMCore/MVMCore/Utility/Helpers/MVMCoreGetterUtility.m @@ -65,7 +65,7 @@ } + (BOOL)isOnIPad { - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { return YES; } else { return NO; diff --git a/Scripts/upload_core_frameworks.sh b/Scripts/upload_core_frameworks.sh index 714cf16..9067da5 100755 --- a/Scripts/upload_core_frameworks.sh +++ b/Scripts/upload_core_frameworks.sh @@ -7,7 +7,8 @@ # Copied from Hedden, Kyle Matthew on 3/2/18. # -FRAMEWORK_VERSION=$(cd ../MVMCore && agvtool vers -terse) +BUILD_SETTINGS=$(xcodebuild -showBuildSettings -project ../MVMCore/MVMCore.xcodeproj) +FRAMEWORK_VERSION=$(echo "$BUILD_SETTINGS" | grep -w -o 'MARKETING_VERSION = .*' | cut -d\ -f3-) if [ $(git tag --list | grep "v${FRAMEWORK_VERSION}") ]; then echo This version tag has already been committed! Aborting! exit 1 @@ -19,6 +20,5 @@ if [ -z $ARTIFACTORY_URL ]; then ARTIFACTORY_URL="https://oneartifactoryprod.verizon.com/artifactory" fi -# Remote View Versions -BUILD_DIR=$(xcodebuild -showBuildSettings -project ../MVMCore/MVMCore.xcodeproj | grep -w -o 'BUILD_DIR = .*' | cut -d\ -f3-) -./upload_framework.sh $ARTIFACTORY_URL "${BUILD_DIR}/universal/MVMCore.framework" BPHV_MobileFirst_IOS/com/vzw/hss/myverizon/MVMCore/[VER]/MVMCore-[VER]-Debug-SNAPSHOT +BUILD_DIR=$(echo "$BUILD_SETTINGS" | grep -w -o 'BUILD_DIR = .*' | cut -d\ -f3-) +./upload_framework.sh $ARTIFACTORY_URL "${BUILD_DIR}/universal/MVMCore.xcframework" BPHV_MobileFirst_IOS/com/vzw/hss/myverizon/MVMCore/[VER]/MVMCore-[VER]-Debug-SNAPSHOT $FRAMEWORK_VERSION diff --git a/Scripts/upload_framework.sh b/Scripts/upload_framework.sh index 94a6007..dd32e47 100755 --- a/Scripts/upload_framework.sh +++ b/Scripts/upload_framework.sh @@ -14,6 +14,7 @@ URL=$1 LOCALPATH=$2 REMOTEPATH=$3 +FRAMEWORKVER=$4 if [ -z $URL ]; then echo "The artifactory instance url must be specified as the first argument!" @@ -29,10 +30,6 @@ cat "${LOCALPATH}/Info.plist" LOCALBASE=$(basename "${LOCALPATH}") LOCALDIR=$(dirname "${LOCALPATH}") -# Grab the framework version from the bundled Info.plist. -FRAMEWORKVER=$(/usr/libexec/plistbuddy -c "Print :CFBundleShortVersionString" "${LOCALPATH}/Info.plist") -echo -e "\nFramework version: \t${FRAMEWORKVER}" - # Replace the [VER] placeholders with the found version. REMOTEPATH="${REMOTEPATH//\[VER\]/$FRAMEWORKVER}" echo -e "Resolved path: \t\t${REMOTEPATH}"