From 05e7125bb6ec9721f5fe11f6e32699c909127986 Mon Sep 17 00:00:00 2001 From: Andrea Mazzini Date: Fri, 20 Apr 2018 10:06:22 +0200 Subject: [PATCH] Bump to version 3.0.0 --- .swift-version | 2 +- BubbleTransition.podspec | 3 +- CHANGELOG.md | 5 + Demo/Demo.xcodeproj/project.pbxproj | 67 +-- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + Demo/Demo/AppDelegate.swift | 2 +- Demo/Demo/ModalViewController.swift | 35 +- Demo/Demo/ViewController.swift | 53 +- Demo/Podfile.lock | 6 +- .../BubbleTransition.podspec.json | 5 +- Demo/Pods/Manifest.lock | 6 +- Demo/Pods/Pods.xcodeproj/project.pbxproj | 563 ++++++++++-------- .../BubbleTransition-prefix.pch | 8 + .../BubbleTransition-umbrella.h | 10 + .../BubbleTransition.xcconfig | 8 +- .../BubbleTransition/Info.plist | 2 +- .../Pods-Demo/Pods-Demo-frameworks.sh | 86 ++- .../Pods-Demo/Pods-Demo-resources.sh | 56 +- .../Pods-Demo/Pods-Demo-umbrella.h | 10 + .../Pods-Demo/Pods-Demo.debug.xcconfig | 10 +- .../Pods-Demo/Pods-Demo.release.xcconfig | 10 +- .../Pods-DemoTests-frameworks.sh | 82 ++- .../Pods-DemoTests-resources.sh | 56 +- .../Pods-DemoTests/Pods-DemoTests-umbrella.h | 10 + .../Pods-DemoTests.debug.xcconfig | 6 +- .../Pods-DemoTests.release.xcconfig | 6 +- README.md | 2 +- Source/BubbleTransition.swift | 282 ++++----- 28 files changed, 804 insertions(+), 595 deletions(-) create mode 100644 Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/.swift-version b/.swift-version index 9f55b2c..5186d07 100644 --- a/.swift-version +++ b/.swift-version @@ -1 +1 @@ -3.0 +4.0 diff --git a/BubbleTransition.podspec b/BubbleTransition.podspec index 6c896ad..58af7f7 100644 --- a/BubbleTransition.podspec +++ b/BubbleTransition.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BubbleTransition' - s.version = '2.0.2' + s.version = '3.0.0' s.license = 'MIT' s.summary = 'A custom modal transition that presents and dismiss a controller with a bubble effect' s.description = <<-DESC @@ -13,6 +13,7 @@ Pod::Spec.new do |s| s.source = { :git => 'https://github.com/andreamazz/BubbleTransition.git', :tag => s.version } s.ios.deployment_target = '8.0' + s.swift_version = '4.0' s.source_files = 'Source/*.swift' diff --git a/CHANGELOG.md b/CHANGELOG.md index d3b51ea..a9bf79e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,17 @@ All notable changes to this project will be documented in this file. `BubbleTransition` adheres to [Semantic Versioning](http://semver.org/). +- `3.0.x` Releases - [3.0.0](#300) - `2.0.x` Releases - [2.0.0](#200) | [2.0.1](#201) | [2.0.2](#202) - `1.0.x` Releases - [1.0.0](#100) | [1.0.1](#101) | [1.0.2](#102) | [1.0.3](#103) - `0.2.x` Releases - [0.2](#02) --- +## [3.0.0](https://github.com/andreamazz/BubbleTransition/releases/tag/3.0.0) + +- Swift version 4 + ## [2.0.2](https://github.com/andreamazz/BubbleTransition/releases/tag/2.0.2) - Merged #36 diff --git a/Demo/Demo.xcodeproj/project.pbxproj b/Demo/Demo.xcodeproj/project.pbxproj index 2c3bdaa..ef130f4 100644 --- a/Demo/Demo.xcodeproj/project.pbxproj +++ b/Demo/Demo.xcodeproj/project.pbxproj @@ -167,7 +167,6 @@ 659891441B032E3B00BF6CD9 /* Frameworks */, 659891451B032E3B00BF6CD9 /* Resources */, 079A5B5CEE74AECAE0CEE9B9 /* [CP] Embed Pods Frameworks */, - 20A4B72369E93833BBF9485A /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -186,8 +185,6 @@ 659891581B032E3B00BF6CD9 /* Sources */, 659891591B032E3B00BF6CD9 /* Frameworks */, 6598915A1B032E3B00BF6CD9 /* Resources */, - 9BAA9D8C813EB1D31863D6A9 /* [CP] Embed Pods Frameworks */, - D8CCB61E2F8773FA6EA780FC /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -268,58 +265,34 @@ files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/BubbleTransition/BubbleTransition.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BubbleTransition.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 20A4B72369E93833BBF9485A /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Demo/Pods-Demo-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 75D0565A8F3388D487941891 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Demo-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - 9BAA9D8C813EB1D31863D6A9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; A722F743BEDCF10D812B911A /* [CP] Check Pods Manifest.lock */ = { @@ -328,28 +301,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-DemoTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; - D8CCB61E2F8773FA6EA780FC /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -447,6 +408,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -486,6 +448,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; VALIDATE_PRODUCT = YES; }; name = Release; @@ -503,7 +466,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = "01dc3e20-08cf-47c5-b70a-8d645fc53db0"; PROVISIONING_PROFILE_SPECIFIER = Development; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -520,7 +483,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = "01dc3e20-08cf-47c5-b70a-8d645fc53db0"; PROVISIONING_PROFILE_SPECIFIER = Development; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; }; name = Release; }; diff --git a/Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Demo/Demo/AppDelegate.swift b/Demo/Demo/AppDelegate.swift index 6c85d92..c1df98d 100644 --- a/Demo/Demo/AppDelegate.swift +++ b/Demo/Demo/AppDelegate.swift @@ -10,6 +10,6 @@ import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? + var window: UIWindow? } diff --git a/Demo/Demo/ModalViewController.swift b/Demo/Demo/ModalViewController.swift index 543cbfc..089365f 100644 --- a/Demo/Demo/ModalViewController.swift +++ b/Demo/Demo/ModalViewController.swift @@ -9,22 +9,21 @@ import UIKit class ModalViewController: UIViewController { - - @IBOutlet weak var closeButton: UIButton! - - override func viewDidLoad() { - closeButton.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI_4)) - } - - @IBAction func closeAction(_ sender: AnyObject) { - self.dismiss(animated: true, completion: nil) - } - - override func viewWillAppear(_ animated: Bool) { - UIApplication.shared.setStatusBarStyle(.lightContent, animated: true) - } - - override func viewWillDisappear(_ animated: Bool) { - UIApplication.shared.setStatusBarStyle(.default, animated: true) - } + @IBOutlet weak var closeButton: UIButton! + + override func viewDidLoad() { + closeButton.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4) + } + + @IBAction func closeAction(_ sender: AnyObject) { + self.dismiss(animated: true, completion: nil) + } + + override func viewWillAppear(_ animated: Bool) { + UIApplication.shared.setStatusBarStyle(.lightContent, animated: true) + } + + override func viewWillDisappear(_ animated: Bool) { + UIApplication.shared.setStatusBarStyle(.default, animated: true) + } } diff --git a/Demo/Demo/ViewController.swift b/Demo/Demo/ViewController.swift index 0891c79..9e7af8f 100644 --- a/Demo/Demo/ViewController.swift +++ b/Demo/Demo/ViewController.swift @@ -10,32 +10,31 @@ import UIKit import BubbleTransition class ViewController: UIViewController, UIViewControllerTransitioningDelegate { - - @IBOutlet weak var transitionButton: UIButton! - - let transition = BubbleTransition() - - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - let controller = segue.destination - controller.transitioningDelegate = self - controller.modalPresentationStyle = .custom - } - - // MARK: UIViewControllerTransitioningDelegate - - func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { - transition.transitionMode = .present - transition.startingPoint = transitionButton.center - transition.bubbleColor = transitionButton.backgroundColor! - return transition - } - - func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { - transition.transitionMode = .dismiss - transition.startingPoint = transitionButton.center - transition.bubbleColor = transitionButton.backgroundColor! - return transition - } - + @IBOutlet weak var transitionButton: UIButton! + + let transition = BubbleTransition() + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + let controller = segue.destination + controller.transitioningDelegate = self + controller.modalPresentationStyle = .custom + } + + // MARK: UIViewControllerTransitioningDelegate + + func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { + transition.transitionMode = .present + transition.startingPoint = transitionButton.center + transition.bubbleColor = transitionButton.backgroundColor! + return transition + } + + func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { + transition.transitionMode = .dismiss + transition.startingPoint = transitionButton.center + transition.bubbleColor = transitionButton.backgroundColor! + return transition + } + } diff --git a/Demo/Podfile.lock b/Demo/Podfile.lock index f1baf04..52f349b 100644 --- a/Demo/Podfile.lock +++ b/Demo/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - BubbleTransition (2.0.0) + - BubbleTransition (3.0.0) DEPENDENCIES: - BubbleTransition (from `../`) @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - BubbleTransition: bdb9d71993b8d3513008e2dda6bada1ddad25d4f + BubbleTransition: 61f0b5dfbd13c27d734bbd80b680e7d8c29657ba PODFILE CHECKSUM: 509266e47632f639195bfac1deb46ad87c1fc5f6 -COCOAPODS: 1.1.0.rc.2 +COCOAPODS: 1.5.0 diff --git a/Demo/Pods/Local Podspecs/BubbleTransition.podspec.json b/Demo/Pods/Local Podspecs/BubbleTransition.podspec.json index 0c6e452..0c463fe 100644 --- a/Demo/Pods/Local Podspecs/BubbleTransition.podspec.json +++ b/Demo/Pods/Local Podspecs/BubbleTransition.podspec.json @@ -1,6 +1,6 @@ { "name": "BubbleTransition", - "version": "2.0.0", + "version": "3.0.0", "license": "MIT", "summary": "A custom modal transition that presents and dismiss a controller with a bubble effect", "description": "Easy to use custom modal animation that presents the new controller\nwithin a bubble, expanding to cover the whole screen.", @@ -11,11 +11,12 @@ }, "source": { "git": "https://github.com/andreamazz/BubbleTransition.git", - "tag": "2.0.0" + "tag": "3.0.0" }, "platforms": { "ios": "8.0" }, + "swift_version": "4.0", "source_files": "Source/*.swift", "requires_arc": true } diff --git a/Demo/Pods/Manifest.lock b/Demo/Pods/Manifest.lock index f1baf04..52f349b 100644 --- a/Demo/Pods/Manifest.lock +++ b/Demo/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - BubbleTransition (2.0.0) + - BubbleTransition (3.0.0) DEPENDENCIES: - BubbleTransition (from `../`) @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - BubbleTransition: bdb9d71993b8d3513008e2dda6bada1ddad25d4f + BubbleTransition: 61f0b5dfbd13c27d734bbd80b680e7d8c29657ba PODFILE CHECKSUM: 509266e47632f639195bfac1deb46ad87c1fc5f6 -COCOAPODS: 1.1.0.rc.2 +COCOAPODS: 1.5.0 diff --git a/Demo/Pods/Pods.xcodeproj/project.pbxproj b/Demo/Pods/Pods.xcodeproj/project.pbxproj index edf0ff9..ab48336 100644 --- a/Demo/Pods/Pods.xcodeproj/project.pbxproj +++ b/Demo/Pods/Pods.xcodeproj/project.pbxproj @@ -7,99 +7,94 @@ objects = { /* Begin PBXBuildFile section */ - 4C012D74EEB3B8E39B3EB083663682D1 /* Pods-DemoTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 64ED958D48E86E4A470C162D92DEB6DC /* Pods-DemoTests-dummy.m */; }; - 67BB3846BB9447C6156AB9543A08CE3B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */; }; - 6849FAAD72F79DF11E5ED301BB57035F /* BubbleTransition-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B835660C7F2352AA25BC99966A760AB /* BubbleTransition-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 783D09E6FEFC6B29AA8024206E692CE7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */; }; - 8F7ACE0F53320771885A9940B57F0AA0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */; }; - 94AF121BB6ABEC380C085FBBE54C337C /* BubbleTransition-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B19B6D3C14D738F7D8B20253197C3C4 /* BubbleTransition-dummy.m */; }; - BA28D94EADCEBB750807601917E9A175 /* Pods-Demo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 34BE135475DE0644AE63533A89837C39 /* Pods-Demo-dummy.m */; }; - BF945CF5A00A1D30102E638A740A008D /* Pods-Demo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CB693FD6A294953F3710C84EA4D68A6F /* Pods-Demo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C840C63721979B78DB8B6FAE70C4D4C2 /* Pods-DemoTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D86F2263A7926EEBB1CC6DC4C91584 /* Pods-DemoTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8C4A5C81C54CBFA120B4BCA16FDC851 /* BubbleTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419597E0DF128F5B23681287DFC764A5 /* BubbleTransition.swift */; }; + 048B6AD6154DCD9425D0628D4BB332D2 /* BubbleTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B5FBB0B1C784B864F69EDD4038E6339 /* BubbleTransition.swift */; }; + 04F377D952092E9DDB067D4B7E8150B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; + 15B92BD6A32F0D58A1079138ED72C4F1 /* BubbleTransition-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB9C42BE6A4CB6196CD84BCC8365BAC /* BubbleTransition-dummy.m */; }; + 2E661DEBE52AC97DD34645C51498AFFF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; + 3F159A8B3F6F29DAC1F4DD3BFC4892BA /* BubbleTransition-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FAAEF9160BBA54711BC212157174547 /* BubbleTransition-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 565CA1EFAF36547615627A742362F3A7 /* Pods-DemoTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B986DA8565410A1FBB275EBDC22173F /* Pods-DemoTests-dummy.m */; }; + 6D69F38D114E26E5BF67978B75EB8974 /* Pods-Demo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 61FCD9F5AFAA918AE18E0F1754E59089 /* Pods-Demo-dummy.m */; }; + 8A82F6C5D99051A0919FDECF46653426 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; + CEF6A9F5743BF1DBBA79B68133949311 /* Pods-DemoTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 947511070799896770CAF73BCB20B722 /* Pods-DemoTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E8A6CC7053DEEB9AD3F833F3EDE36F3E /* Pods-Demo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ED4652D686FFA05E4CFD837F5DD948A0 /* Pods-Demo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - FEEB41C76DB538C5BD398CC501DBA2DF /* PBXContainerItemProxy */ = { + D58D6B5AAAF99338054DF3463C7F4976 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 7372CA79CE92E7AC032175441663EBE4; + remoteGlobalIDString = 38830187D9E171E7B43047ED06A08ADC; remoteInfo = BubbleTransition; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 03237F31CCE13B4B53C98FBE59C13C3F /* Pods-Demo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Demo.modulemap"; sourceTree = ""; }; - 03C3A50FCC0801E242EEE1E2BB63D964 /* BubbleTransition.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BubbleTransition.xcconfig; sourceTree = ""; }; - 0A3425D848F2AB0CE39F8726C61D39B2 /* Pods-Demo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Demo-acknowledgements.plist"; sourceTree = ""; }; - 0F14967409FA9567ECECE33DBC98A018 /* Pods-DemoTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DemoTests-acknowledgements.markdown"; sourceTree = ""; }; - 14C3ADBE966D19E50A7B0C90042CA6B8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1F7C4E6C9B82CF1F96AFF7B443B99AAC /* Pods_DemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BF65439C3E9BF7516E08F1DAF960352 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2EFE77D726F39B085A0976A2710DCC8E /* Pods-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Demo.release.xcconfig"; sourceTree = ""; }; - 34BE135475DE0644AE63533A89837C39 /* Pods-Demo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Demo-dummy.m"; sourceTree = ""; }; - 3B835660C7F2352AA25BC99966A760AB /* BubbleTransition-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BubbleTransition-umbrella.h"; sourceTree = ""; }; - 3E929B4648643CAF287DC5D2C8371CE5 /* Pods-Demo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Demo-acknowledgements.markdown"; sourceTree = ""; }; - 419597E0DF128F5B23681287DFC764A5 /* BubbleTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BubbleTransition.swift; sourceTree = ""; }; - 625ADED01F774CF413E1487CE967CD41 /* Pods_Demo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 64ED958D48E86E4A470C162D92DEB6DC /* Pods-DemoTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DemoTests-dummy.m"; sourceTree = ""; }; - 657593A21C22D6D4EC920361C5CB9542 /* Pods-DemoTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-DemoTests.modulemap"; sourceTree = ""; }; - 6DDC285E418FF22EC1B53049378F73F5 /* BubbleTransition.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BubbleTransition.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B19B6D3C14D738F7D8B20253197C3C4 /* BubbleTransition-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BubbleTransition-dummy.m"; sourceTree = ""; }; - 7D174BC0219B395730FF6D29969C6F9D /* Pods-DemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoTests.release.xcconfig"; sourceTree = ""; }; - 8110977EEB92C5C36FD6C89D1644E240 /* Pods-Demo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Demo-frameworks.sh"; sourceTree = ""; }; - 8F7A44BB88DE53353F97FC4839193EA6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 94D86F2263A7926EEBB1CC6DC4C91584 /* Pods-DemoTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DemoTests-umbrella.h"; sourceTree = ""; }; - 9AFFD6F084B0B56D49EADD0D9AEDB762 /* Pods-DemoTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoTests-frameworks.sh"; sourceTree = ""; }; - A60CFBD31559D4AB99CDE74CEA8D9F66 /* BubbleTransition-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BubbleTransition-prefix.pch"; sourceTree = ""; }; - A76C7611A06FCD26EB4E3998E5EE9297 /* Pods-DemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoTests.debug.xcconfig"; sourceTree = ""; }; - C949AE3B3D57F7D9EFDA8C8921FD8D6D /* Pods-Demo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Demo-resources.sh"; sourceTree = ""; }; - CAFE87CE875E3078BCE48645C88B75F9 /* Pods-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Demo.debug.xcconfig"; sourceTree = ""; }; - CB693FD6A294953F3710C84EA4D68A6F /* Pods-Demo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Demo-umbrella.h"; sourceTree = ""; }; - CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - D8C5971DD6E5538199F0098C0CA42CD4 /* Pods-DemoTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DemoTests-acknowledgements.plist"; sourceTree = ""; }; - DF2BF3EBB434BF9C5D2C2B14AE81C7A1 /* BubbleTransition.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = BubbleTransition.modulemap; sourceTree = ""; }; - FCDD75AC8038943A8E2C2C2CD6C34834 /* Pods-DemoTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoTests-resources.sh"; sourceTree = ""; }; + 0261C010D517612D2F43027BCADF859A /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 0718F198756CC3FCF3EC3F4AAFF51E1F /* BubbleTransition.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BubbleTransition.xcconfig; sourceTree = ""; }; + 137F93901D86DD727245232DB84C0501 /* Pods-DemoTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DemoTests-acknowledgements.markdown"; sourceTree = ""; }; + 1F7C4E6C9B82CF1F96AFF7B443B99AAC /* Pods_DemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_DemoTests.framework; path = "Pods-DemoTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 208B51FF7C820FF335FEFC6064EDF437 /* BubbleTransition.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = BubbleTransition.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 2FAAEF9160BBA54711BC212157174547 /* BubbleTransition-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BubbleTransition-umbrella.h"; sourceTree = ""; }; + 399B006E2977C12A104E16C77804FD8D /* Pods-DemoTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoTests-frameworks.sh"; sourceTree = ""; }; + 3C707943BE6DB0504280DB779E90B00A /* BubbleTransition-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BubbleTransition-prefix.pch"; sourceTree = ""; }; + 43B0514188824A8DF9BE4525F4C0AAF7 /* Pods-Demo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Demo-frameworks.sh"; sourceTree = ""; }; + 4906E7F6E307512D338DAAB9808A5980 /* Pods-Demo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Demo.modulemap"; sourceTree = ""; }; + 4CB22A9BED60505A355D13240451A9E0 /* Pods-DemoTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DemoTests-resources.sh"; sourceTree = ""; }; + 61FCD9F5AFAA918AE18E0F1754E59089 /* Pods-Demo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Demo-dummy.m"; sourceTree = ""; }; + 625ADED01F774CF413E1487CE967CD41 /* Pods_Demo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Demo.framework; path = "Pods-Demo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 6B986DA8565410A1FBB275EBDC22173F /* Pods-DemoTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DemoTests-dummy.m"; sourceTree = ""; }; + 6DDC285E418FF22EC1B53049378F73F5 /* BubbleTransition.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = BubbleTransition.framework; path = BubbleTransition.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 79F2D354804A11481B2091334E9BE69D /* BubbleTransition.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = BubbleTransition.modulemap; sourceTree = ""; }; + 8770613CD8D6FFEBC01B5906D0AE2C99 /* Pods-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Demo.release.xcconfig"; sourceTree = ""; }; + 899F7D96738B594A432CEED858F6FF94 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8B5FBB0B1C784B864F69EDD4038E6339 /* BubbleTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleTransition.swift; path = Source/BubbleTransition.swift; sourceTree = ""; }; + 8FB9C42BE6A4CB6196CD84BCC8365BAC /* BubbleTransition-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BubbleTransition-dummy.m"; sourceTree = ""; }; + 9035AB3B1B87BE64DA7F6D62D4004A32 /* Pods-Demo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Demo-acknowledgements.markdown"; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 947511070799896770CAF73BCB20B722 /* Pods-DemoTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DemoTests-umbrella.h"; sourceTree = ""; }; + 9C86746B7782939999EF488A707ED793 /* Pods-DemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoTests.debug.xcconfig"; sourceTree = ""; }; + A6CB3D9F45EE9BAEB738CFCA213A7D9A /* Pods-Demo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Demo-resources.sh"; sourceTree = ""; }; + A90D775A3043D21572B4AF438A91629D /* Pods-DemoTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DemoTests-acknowledgements.plist"; sourceTree = ""; }; + A9D57B9A5440D76082DF3AD2C1289F7B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B280BA097BF5A1313FFA26C321E9D586 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + B3B1FE08B862EAB796DF4CF965FDAF54 /* Pods-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Demo.debug.xcconfig"; sourceTree = ""; }; + CA7749509FFC4CF987FE94C109993700 /* Pods-DemoTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DemoTests.modulemap"; sourceTree = ""; }; + CEE8FAC3960020923D811F92029719E4 /* Pods-DemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoTests.release.xcconfig"; sourceTree = ""; }; + E0194F552CC753BABCC5FE3810477268 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E591EB13105E3738351C6AB010D7A223 /* Pods-Demo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Demo-acknowledgements.plist"; sourceTree = ""; }; + ED4652D686FFA05E4CFD837F5DD948A0 /* Pods-Demo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Demo-umbrella.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 366E09354561C799A49CA36E2844E92C /* Frameworks */ = { + 80BAED8264659300BEDB626EC66C5972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 783D09E6FEFC6B29AA8024206E692CE7 /* Foundation.framework in Frameworks */, + 04F377D952092E9DDB067D4B7E8150B0 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5AA30D99C7D7F6EAD6B91A7D6B760F0D /* Frameworks */ = { + D756DA14932342915B06B5A24C295CE3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8F7ACE0F53320771885A9940B57F0AA0 /* Foundation.framework in Frameworks */, + 2E661DEBE52AC97DD34645C51498AFFF /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 83FF2E05D68CBCC529D00B09EF9B0BF7 /* Frameworks */ = { + DE63AD24BB9F50CC1A67371F2BD99674 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67BB3846BB9447C6156AB9543A08CE3B /* Foundation.framework in Frameworks */, + 8A82F6C5D99051A0919FDECF46653426 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0952AD5F6D55F129559BCAA64D18E35C /* Source */ = { - isa = PBXGroup; - children = ( - 419597E0DF128F5B23681287DFC764A5 /* BubbleTransition.swift */, - ); - path = Source; - sourceTree = ""; - }; 269AE2A6F450F027D46E859894BDB6C3 /* Products */ = { isa = PBXGroup; children = ( @@ -110,51 +105,54 @@ name = Products; sourceTree = ""; }; - 348C132E75CFCFC129CCEC80443EF65F /* Pods-Demo */ = { + 509827DD1A780996CFF48B5611598F0F /* Pod */ = { isa = PBXGroup; children = ( - 2BF65439C3E9BF7516E08F1DAF960352 /* Info.plist */, - 03237F31CCE13B4B53C98FBE59C13C3F /* Pods-Demo.modulemap */, - 3E929B4648643CAF287DC5D2C8371CE5 /* Pods-Demo-acknowledgements.markdown */, - 0A3425D848F2AB0CE39F8726C61D39B2 /* Pods-Demo-acknowledgements.plist */, - 34BE135475DE0644AE63533A89837C39 /* Pods-Demo-dummy.m */, - 8110977EEB92C5C36FD6C89D1644E240 /* Pods-Demo-frameworks.sh */, - C949AE3B3D57F7D9EFDA8C8921FD8D6D /* Pods-Demo-resources.sh */, - CB693FD6A294953F3710C84EA4D68A6F /* Pods-Demo-umbrella.h */, - CAFE87CE875E3078BCE48645C88B75F9 /* Pods-Demo.debug.xcconfig */, - 2EFE77D726F39B085A0976A2710DCC8E /* Pods-Demo.release.xcconfig */, + 208B51FF7C820FF335FEFC6064EDF437 /* BubbleTransition.podspec */, + 0261C010D517612D2F43027BCADF859A /* LICENSE */, + B280BA097BF5A1313FFA26C321E9D586 /* README.md */, ); - name = "Pods-Demo"; - path = "Target Support Files/Pods-Demo"; + name = Pod; sourceTree = ""; }; - 3DCAB2B7CDE207B3958B6CB957FCC758 /* iOS */ = { + 54E12C64EC067A327EE1F3B83B2A1991 /* BubbleTransition */ = { isa = PBXGroup; children = ( - CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */, + 8B5FBB0B1C784B864F69EDD4038E6339 /* BubbleTransition.swift */, + 509827DD1A780996CFF48B5611598F0F /* Pod */, + 743FEB1E4D7455C5A40092686528EE38 /* Support Files */, ); - name = iOS; + name = BubbleTransition; + path = ../..; sourceTree = ""; }; - 75DF0EDF86DF957DFE706B652D4A0466 /* BubbleTransition */ = { + 71960E4308F9053FB1C91EDDE6860ECA /* Pods-DemoTests */ = { isa = PBXGroup; children = ( - 0952AD5F6D55F129559BCAA64D18E35C /* Source */, - 76AB1BDFCCB5D38BF459081E21133F70 /* Support Files */, + 899F7D96738B594A432CEED858F6FF94 /* Info.plist */, + CA7749509FFC4CF987FE94C109993700 /* Pods-DemoTests.modulemap */, + 137F93901D86DD727245232DB84C0501 /* Pods-DemoTests-acknowledgements.markdown */, + A90D775A3043D21572B4AF438A91629D /* Pods-DemoTests-acknowledgements.plist */, + 6B986DA8565410A1FBB275EBDC22173F /* Pods-DemoTests-dummy.m */, + 399B006E2977C12A104E16C77804FD8D /* Pods-DemoTests-frameworks.sh */, + 4CB22A9BED60505A355D13240451A9E0 /* Pods-DemoTests-resources.sh */, + 947511070799896770CAF73BCB20B722 /* Pods-DemoTests-umbrella.h */, + 9C86746B7782939999EF488A707ED793 /* Pods-DemoTests.debug.xcconfig */, + CEE8FAC3960020923D811F92029719E4 /* Pods-DemoTests.release.xcconfig */, ); - name = BubbleTransition; - path = ../..; + name = "Pods-DemoTests"; + path = "Target Support Files/Pods-DemoTests"; sourceTree = ""; }; - 76AB1BDFCCB5D38BF459081E21133F70 /* Support Files */ = { + 743FEB1E4D7455C5A40092686528EE38 /* Support Files */ = { isa = PBXGroup; children = ( - DF2BF3EBB434BF9C5D2C2B14AE81C7A1 /* BubbleTransition.modulemap */, - 03C3A50FCC0801E242EEE1E2BB63D964 /* BubbleTransition.xcconfig */, - 7B19B6D3C14D738F7D8B20253197C3C4 /* BubbleTransition-dummy.m */, - A60CFBD31559D4AB99CDE74CEA8D9F66 /* BubbleTransition-prefix.pch */, - 3B835660C7F2352AA25BC99966A760AB /* BubbleTransition-umbrella.h */, - 8F7A44BB88DE53353F97FC4839193EA6 /* Info.plist */, + 79F2D354804A11481B2091334E9BE69D /* BubbleTransition.modulemap */, + 0718F198756CC3FCF3EC3F4AAFF51E1F /* BubbleTransition.xcconfig */, + 8FB9C42BE6A4CB6196CD84BCC8365BAC /* BubbleTransition-dummy.m */, + 3C707943BE6DB0504280DB779E90B00A /* BubbleTransition-prefix.pch */, + 2FAAEF9160BBA54711BC212157174547 /* BubbleTransition-umbrella.h */, + E0194F552CC753BABCC5FE3810477268 /* Info.plist */, ); name = "Support Files"; path = "Demo/Pods/Target Support Files/BubbleTransition"; @@ -164,7 +162,7 @@ isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - FDF0E7129E58BBD9877DFF0D3306C659 /* Development Pods */, + BC23CAA2EA1450420A259565C7C8DAF8 /* Development Pods */, BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 269AE2A6F450F027D46E859894BDB6C3 /* Products */, 8BD2AF98586608E9C5E4AC2EE85150B7 /* Targets Support Files */, @@ -174,101 +172,109 @@ 8BD2AF98586608E9C5E4AC2EE85150B7 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 348C132E75CFCFC129CCEC80443EF65F /* Pods-Demo */, - E76DE6EFE3983F78B677CDD8394FC7D8 /* Pods-DemoTests */, + BADBF3A0E4C3B3010DD70FEB4AF18153 /* Pods-Demo */, + 71960E4308F9053FB1C91EDDE6860ECA /* Pods-DemoTests */, ); name = "Targets Support Files"; sourceTree = ""; }; - BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { + BADBF3A0E4C3B3010DD70FEB4AF18153 /* Pods-Demo */ = { isa = PBXGroup; children = ( - 3DCAB2B7CDE207B3958B6CB957FCC758 /* iOS */, + A9D57B9A5440D76082DF3AD2C1289F7B /* Info.plist */, + 4906E7F6E307512D338DAAB9808A5980 /* Pods-Demo.modulemap */, + 9035AB3B1B87BE64DA7F6D62D4004A32 /* Pods-Demo-acknowledgements.markdown */, + E591EB13105E3738351C6AB010D7A223 /* Pods-Demo-acknowledgements.plist */, + 61FCD9F5AFAA918AE18E0F1754E59089 /* Pods-Demo-dummy.m */, + 43B0514188824A8DF9BE4525F4C0AAF7 /* Pods-Demo-frameworks.sh */, + A6CB3D9F45EE9BAEB738CFCA213A7D9A /* Pods-Demo-resources.sh */, + ED4652D686FFA05E4CFD837F5DD948A0 /* Pods-Demo-umbrella.h */, + B3B1FE08B862EAB796DF4CF965FDAF54 /* Pods-Demo.debug.xcconfig */, + 8770613CD8D6FFEBC01B5906D0AE2C99 /* Pods-Demo.release.xcconfig */, ); - name = Frameworks; + name = "Pods-Demo"; + path = "Target Support Files/Pods-Demo"; sourceTree = ""; }; - E76DE6EFE3983F78B677CDD8394FC7D8 /* Pods-DemoTests */ = { + BC23CAA2EA1450420A259565C7C8DAF8 /* Development Pods */ = { isa = PBXGroup; children = ( - 14C3ADBE966D19E50A7B0C90042CA6B8 /* Info.plist */, - 657593A21C22D6D4EC920361C5CB9542 /* Pods-DemoTests.modulemap */, - 0F14967409FA9567ECECE33DBC98A018 /* Pods-DemoTests-acknowledgements.markdown */, - D8C5971DD6E5538199F0098C0CA42CD4 /* Pods-DemoTests-acknowledgements.plist */, - 64ED958D48E86E4A470C162D92DEB6DC /* Pods-DemoTests-dummy.m */, - 9AFFD6F084B0B56D49EADD0D9AEDB762 /* Pods-DemoTests-frameworks.sh */, - FCDD75AC8038943A8E2C2C2CD6C34834 /* Pods-DemoTests-resources.sh */, - 94D86F2263A7926EEBB1CC6DC4C91584 /* Pods-DemoTests-umbrella.h */, - A76C7611A06FCD26EB4E3998E5EE9297 /* Pods-DemoTests.debug.xcconfig */, - 7D174BC0219B395730FF6D29969C6F9D /* Pods-DemoTests.release.xcconfig */, + 54E12C64EC067A327EE1F3B83B2A1991 /* BubbleTransition */, ); - name = "Pods-DemoTests"; - path = "Target Support Files/Pods-DemoTests"; + name = "Development Pods"; sourceTree = ""; }; - FDF0E7129E58BBD9877DFF0D3306C659 /* Development Pods */ = { + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { isa = PBXGroup; children = ( - 75DF0EDF86DF957DFE706B652D4A0466 /* BubbleTransition */, + D35AF013A5F0BAD4F32504907A52519E /* iOS */, ); - name = "Development Pods"; + name = Frameworks; + sourceTree = ""; + }; + D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { + isa = PBXGroup; + children = ( + 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, + ); + name = iOS; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 15E36E38462E8FE467A8ED76F5BB1385 /* Headers */ = { + 04333389C8450AA486FA870E0F4C6D90 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BF945CF5A00A1D30102E638A740A008D /* Pods-Demo-umbrella.h in Headers */, + 3F159A8B3F6F29DAC1F4DD3BFC4892BA /* BubbleTransition-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E2A041A90C6087B1A41C5429E7B7DE7B /* Headers */ = { + 5D963F7ED1A35FDC3B939B60D9C66FD2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6849FAAD72F79DF11E5ED301BB57035F /* BubbleTransition-umbrella.h in Headers */, + E8A6CC7053DEEB9AD3F833F3EDE36F3E /* Pods-Demo-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E42608AF8B4137FA47FFE13BF2155E7C /* Headers */ = { + 8AA1ED914CE7728BAB7AAE7F5281452C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C840C63721979B78DB8B6FAE70C4D4C2 /* Pods-DemoTests-umbrella.h in Headers */, + CEF6A9F5743BF1DBBA79B68133949311 /* Pods-DemoTests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 6DAFB654B2950CC5CF03E9D071F6B32E /* Pods-Demo */ = { + 18C4DBF38BF3B4F0DCCD45A789A5DC8D /* Pods-Demo */ = { isa = PBXNativeTarget; - buildConfigurationList = 1FBA4B8883A55DD6B97D6101F2707FFA /* Build configuration list for PBXNativeTarget "Pods-Demo" */; + buildConfigurationList = C1B455DB3534CEED955BF4DB352B21DA /* Build configuration list for PBXNativeTarget "Pods-Demo" */; buildPhases = ( - 10E76E139DB95E75E9CAFC8F4FD7A16A /* Sources */, - 5AA30D99C7D7F6EAD6B91A7D6B760F0D /* Frameworks */, - 15E36E38462E8FE467A8ED76F5BB1385 /* Headers */, + 4822B2BF235386DC84FB38BD19C07C7A /* Sources */, + DE63AD24BB9F50CC1A67371F2BD99674 /* Frameworks */, + 5D963F7ED1A35FDC3B939B60D9C66FD2 /* Headers */, ); buildRules = ( ); dependencies = ( - BA2D86E669913386CABAF60915337236 /* PBXTargetDependency */, + 0FE6801A5673A34F45D834124A8867EA /* PBXTargetDependency */, ); name = "Pods-Demo"; productName = "Pods-Demo"; productReference = 625ADED01F774CF413E1487CE967CD41 /* Pods_Demo.framework */; productType = "com.apple.product-type.framework"; }; - 7372CA79CE92E7AC032175441663EBE4 /* BubbleTransition */ = { + 38830187D9E171E7B43047ED06A08ADC /* BubbleTransition */ = { isa = PBXNativeTarget; - buildConfigurationList = E481E9DBD0219904DB699E6812D3EE08 /* Build configuration list for PBXNativeTarget "BubbleTransition" */; + buildConfigurationList = 80A1B16222697C3079DBB028B38F7DBE /* Build configuration list for PBXNativeTarget "BubbleTransition" */; buildPhases = ( - ED2ED89D9C8333D6808D95CC9C7ABDCF /* Sources */, - 366E09354561C799A49CA36E2844E92C /* Frameworks */, - E2A041A90C6087B1A41C5429E7B7DE7B /* Headers */, + DC1D173450EDD70117FFCBCB61B9624E /* Sources */, + D756DA14932342915B06B5A24C295CE3 /* Frameworks */, + 04333389C8450AA486FA870E0F4C6D90 /* Headers */, ); buildRules = ( ); @@ -279,13 +285,13 @@ productReference = 6DDC285E418FF22EC1B53049378F73F5 /* BubbleTransition.framework */; productType = "com.apple.product-type.framework"; }; - D548370457DEA9E612AB613DECEC925E /* Pods-DemoTests */ = { + A99338F9917CB98B3B19A0909E91616F /* Pods-DemoTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 129101A10255AE6EF678510690CB0DC8 /* Build configuration list for PBXNativeTarget "Pods-DemoTests" */; + buildConfigurationList = D62089A5F48E5AD84C5FF4E43C881E3F /* Build configuration list for PBXNativeTarget "Pods-DemoTests" */; buildPhases = ( - 26AE9AEA8E27FEBBA340FEA7A0ADB024 /* Sources */, - 83FF2E05D68CBCC529D00B09EF9B0BF7 /* Frameworks */, - E42608AF8B4137FA47FFE13BF2155E7C /* Headers */, + 6EDD431024CA695038807D5697892579 /* Sources */, + 80BAED8264659300BEDB626EC66C5972 /* Frameworks */, + 8AA1ED914CE7728BAB7AAE7F5281452C /* Headers */, ); buildRules = ( ); @@ -302,8 +308,8 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -317,80 +323,79 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 7372CA79CE92E7AC032175441663EBE4 /* BubbleTransition */, - 6DAFB654B2950CC5CF03E9D071F6B32E /* Pods-Demo */, - D548370457DEA9E612AB613DECEC925E /* Pods-DemoTests */, + 38830187D9E171E7B43047ED06A08ADC /* BubbleTransition */, + 18C4DBF38BF3B4F0DCCD45A789A5DC8D /* Pods-Demo */, + A99338F9917CB98B3B19A0909E91616F /* Pods-DemoTests */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 10E76E139DB95E75E9CAFC8F4FD7A16A /* Sources */ = { + 4822B2BF235386DC84FB38BD19C07C7A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BA28D94EADCEBB750807601917E9A175 /* Pods-Demo-dummy.m in Sources */, + 6D69F38D114E26E5BF67978B75EB8974 /* Pods-Demo-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 26AE9AEA8E27FEBBA340FEA7A0ADB024 /* Sources */ = { + 6EDD431024CA695038807D5697892579 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4C012D74EEB3B8E39B3EB083663682D1 /* Pods-DemoTests-dummy.m in Sources */, + 565CA1EFAF36547615627A742362F3A7 /* Pods-DemoTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - ED2ED89D9C8333D6808D95CC9C7ABDCF /* Sources */ = { + DC1D173450EDD70117FFCBCB61B9624E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 94AF121BB6ABEC380C085FBBE54C337C /* BubbleTransition-dummy.m in Sources */, - D8C4A5C81C54CBFA120B4BCA16FDC851 /* BubbleTransition.swift in Sources */, + 15B92BD6A32F0D58A1079138ED72C4F1 /* BubbleTransition-dummy.m in Sources */, + 048B6AD6154DCD9425D0628D4BB332D2 /* BubbleTransition.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - BA2D86E669913386CABAF60915337236 /* PBXTargetDependency */ = { + 0FE6801A5673A34F45D834124A8867EA /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = BubbleTransition; - target = 7372CA79CE92E7AC032175441663EBE4 /* BubbleTransition */; - targetProxy = FEEB41C76DB538C5BD398CC501DBA2DF /* PBXContainerItemProxy */; + target = 38830187D9E171E7B43047ED06A08ADC /* BubbleTransition */; + targetProxy = D58D6B5AAAF99338054DF3463C7F4976 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 2420FC6D00B02F906A005624C9C9DDD3 /* Debug */ = { + 222FBFBFFF3101C1F87338B97F284686 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CAFE87CE875E3078BCE48645C88B75F9 /* Pods-Demo.debug.xcconfig */; + baseConfigurationReference = B3B1FE08B862EAB796DF4CF965FDAF54 /* Pods-Demo.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Target Support Files/Pods-Demo/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-Demo/Pods-Demo.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Demo; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -398,255 +403,289 @@ }; name = Debug; }; - 6B9709E703287E3F652067F4FA5591F6 /* Debug */ = { + 5323DF290A64922AB5CB91A4E36BC238 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 03C3A50FCC0801E242EEE1E2BB63D964 /* BubbleTransition.xcconfig */; + baseConfigurationReference = 8770613CD8D6FFEBC01B5906D0AE2C99 /* Pods-Demo.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Demo/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Demo/Pods-Demo.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 5DE9C09CABC87284BD73605CFE56B93D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0718F198756CC3FCF3EC3F4AAFF51E1F /* BubbleTransition.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; GCC_PREFIX_HEADER = "Target Support Files/BubbleTransition/BubbleTransition-prefix.pch"; INFOPLIST_FILE = "Target Support Files/BubbleTransition/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/BubbleTransition/BubbleTransition.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_MODULE_NAME = BubbleTransition; PRODUCT_NAME = BubbleTransition; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 746EC849D6BB0EFB9C03A45CB781FB4F /* Debug */ = { + 9624079AD33B322FABE86B98652E395D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A76C7611A06FCD26EB4E3998E5EE9297 /* Pods-DemoTests.debug.xcconfig */; + baseConfigurationReference = CEE8FAC3960020923D811F92029719E4 /* Pods-DemoTests.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Target Support Files/Pods-DemoTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-DemoTests/Pods-DemoTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_DemoTests; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 8DED8AD26D381A6ACFF202E5217EC498 /* Release */ = { + C7BE62186E17127FF3B5B27A193214BD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 9E1E4E48AF2EAB23169E611BF694090A /* Debug */ = { + D077E5AF30E3A09910AC48CA760A1280 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.3; - ONLY_ACTIVE_ARCH = YES; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; }; - name = Debug; - }; - C1A2F49CA17DB7277C5BAB78CD45F33D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 03C3A50FCC0801E242EEE1E2BB63D964 /* BubbleTransition.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/BubbleTransition/BubbleTransition-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/BubbleTransition/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/BubbleTransition/BubbleTransition.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = BubbleTransition; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; name = Release; }; - C90EDE42AADCB006BF4AB97E9FA2681D /* Release */ = { + DB155B34C5709D141E3E8FC98374488B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D174BC0219B395730FF6D29969C6F9D /* Pods-DemoTests.release.xcconfig */; + baseConfigurationReference = 9C86746B7782939999EF488A707ED793 /* Pods-DemoTests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Target Support Files/Pods-DemoTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-DemoTests/Pods-DemoTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_DemoTests; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - C9B5CA68F4DAB54DA64CBC533EFCAC74 /* Release */ = { + F2A4ADC5C4778418315129A4CD4A6DCF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2EFE77D726F39B085A0976A2710DCC8E /* Pods-Demo.release.xcconfig */; + baseConfigurationReference = 0718F198756CC3FCF3EC3F4AAFF51E1F /* BubbleTransition.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Demo/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/BubbleTransition/BubbleTransition-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/BubbleTransition/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Demo/Pods-Demo.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Demo; + MODULEMAP_FILE = "Target Support Files/BubbleTransition/BubbleTransition.modulemap"; + PRODUCT_MODULE_NAME = BubbleTransition; + PRODUCT_NAME = BubbleTransition; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -655,38 +694,38 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 129101A10255AE6EF678510690CB0DC8 /* Build configuration list for PBXNativeTarget "Pods-DemoTests" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 746EC849D6BB0EFB9C03A45CB781FB4F /* Debug */, - C90EDE42AADCB006BF4AB97E9FA2681D /* Release */, + C7BE62186E17127FF3B5B27A193214BD /* Debug */, + D077E5AF30E3A09910AC48CA760A1280 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1FBA4B8883A55DD6B97D6101F2707FFA /* Build configuration list for PBXNativeTarget "Pods-Demo" */ = { + 80A1B16222697C3079DBB028B38F7DBE /* Build configuration list for PBXNativeTarget "BubbleTransition" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2420FC6D00B02F906A005624C9C9DDD3 /* Debug */, - C9B5CA68F4DAB54DA64CBC533EFCAC74 /* Release */, + 5DE9C09CABC87284BD73605CFE56B93D /* Debug */, + F2A4ADC5C4778418315129A4CD4A6DCF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + C1B455DB3534CEED955BF4DB352B21DA /* Build configuration list for PBXNativeTarget "Pods-Demo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9E1E4E48AF2EAB23169E611BF694090A /* Debug */, - 8DED8AD26D381A6ACFF202E5217EC498 /* Release */, + 222FBFBFFF3101C1F87338B97F284686 /* Debug */, + 5323DF290A64922AB5CB91A4E36BC238 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E481E9DBD0219904DB699E6812D3EE08 /* Build configuration list for PBXNativeTarget "BubbleTransition" */ = { + D62089A5F48E5AD84C5FF4E43C881E3F /* Build configuration list for PBXNativeTarget "Pods-DemoTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6B9709E703287E3F652067F4FA5591F6 /* Debug */, - C1A2F49CA17DB7277C5BAB78CD45F33D /* Release */, + DB155B34C5709D141E3E8FC98374488B /* Debug */, + 9624079AD33B322FABE86B98652E395D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-prefix.pch b/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-prefix.pch index aa992a4..beb2a24 100644 --- a/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-prefix.pch +++ b/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-umbrella.h b/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-umbrella.h index bf73a67..69fb79b 100644 --- a/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-umbrella.h +++ b/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif FOUNDATION_EXPORT double BubbleTransitionVersionNumber; diff --git a/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition.xcconfig b/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition.xcconfig index 5451687..bfb60a6 100644 --- a/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition.xcconfig +++ b/Demo/Pods/Target Support Files/BubbleTransition/BubbleTransition.xcconfig @@ -1,9 +1,9 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BubbleTransition +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BubbleTransition GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES diff --git a/Demo/Pods/Target Support Files/BubbleTransition/Info.plist b/Demo/Pods/Target Support Files/BubbleTransition/Info.plist index 0a12077..4522675 100644 --- a/Demo/Pods/Target Support Files/BubbleTransition/Info.plist +++ b/Demo/Pods/Target Support Files/BubbleTransition/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.0 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh index f4311ef..3972e4c 100755 --- a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh +++ b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh @@ -1,11 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -23,9 +40,9 @@ install_framework() source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -54,24 +71,65 @@ install_framework() fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" fi } # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" @@ -80,12 +138,16 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/BubbleTransition/BubbleTransition.framework" + install_framework "${BUILT_PRODUCTS_DIR}/BubbleTransition/BubbleTransition.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "$BUILT_PRODUCTS_DIR/BubbleTransition/BubbleTransition.framework" + install_framework "${BUILT_PRODUCTS_DIR}/BubbleTransition/BubbleTransition.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait fi diff --git a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-resources.sh b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-resources.sh index 0a15615..fe3f9c7 100755 --- a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-resources.sh +++ b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -18,17 +30,17 @@ case "${TARGETED_DEVICE_FAMILY}" in 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac -realpath() { - DIRECTORY="$(cd "${1%/*}" && pwd)" - FILENAME="${1##*/}" - echo "$DIRECTORY/$FILENAME" -} - install_resource() { if [[ "$1" = /* ]] ; then @@ -44,37 +56,37 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) - ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -88,15 +100,19 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do - if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + if [[ $line != "${PODS_ROOT}*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-umbrella.h b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-umbrella.h index ad0dd7e..6ccb7f7 100644 --- a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-umbrella.h +++ b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif FOUNDATION_EXPORT double Pods_DemoVersionNumber; diff --git a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig index e3a024d..a9f0346 100644 --- a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig +++ b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig @@ -1,11 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BubbleTransition" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BubbleTransition" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/BubbleTransition/BubbleTransition.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BubbleTransition/BubbleTransition.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "BubbleTransition" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig index e3a024d..a9f0346 100644 --- a/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig +++ b/Demo/Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig @@ -1,11 +1,11 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BubbleTransition" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BubbleTransition" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/BubbleTransition/BubbleTransition.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BubbleTransition/BubbleTransition.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "BubbleTransition" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-frameworks.sh b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-frameworks.sh index 893c16a..08e3eaa 100755 --- a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-frameworks.sh +++ b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-frameworks.sh @@ -1,11 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -23,9 +40,9 @@ install_framework() source="$(readlink "${source}")" fi - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" @@ -54,24 +71,65 @@ install_framework() fi } +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" fi } # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" @@ -80,5 +138,9 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-resources.sh b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-resources.sh index 0a15615..fe3f9c7 100755 --- a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-resources.sh +++ b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -8,7 +16,11 @@ RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt XCASSET_FILES=() -case "${TARGETED_DEVICE_FAMILY}" in +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -18,17 +30,17 @@ case "${TARGETED_DEVICE_FAMILY}" in 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac -realpath() { - DIRECTORY="$(cd "${1%/*}" && pwd)" - FILENAME="${1##*/}" - echo "$DIRECTORY/$FILENAME" -} - install_resource() { if [[ "$1" = /* ]] ; then @@ -44,37 +56,37 @@ EOM fi case $RESOURCE_PATH in *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) - ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) - echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac @@ -88,15 +100,19 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do - if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + if [[ $line != "${PODS_ROOT}*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-umbrella.h b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-umbrella.h index a8df38f..065f6a3 100644 --- a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-umbrella.h +++ b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif FOUNDATION_EXPORT double Pods_DemoTestsVersionNumber; diff --git a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.debug.xcconfig b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.debug.xcconfig index 8b1315d..566aa02 100644 --- a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.debug.xcconfig +++ b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.debug.xcconfig @@ -1,6 +1,6 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.release.xcconfig b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.release.xcconfig index 8b1315d..566aa02 100644 --- a/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.release.xcconfig +++ b/Demo/Pods/Target Support Files/Pods-DemoTests/Pods-DemoTests.release.xcconfig @@ -1,6 +1,6 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/README.md b/README.md index 1ff8147..2d33902 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ Thanks to [everyone](https://github.com/andreamazz/BubbleTransition/graphs/contr # MIT License - Copyright (c) 2017 Andrea Mazzini. All rights reserved. + Copyright (c) 2018 Andrea Mazzini. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/Source/BubbleTransition.swift b/Source/BubbleTransition.swift index 14690d3..7a92765 100644 --- a/Source/BubbleTransition.swift +++ b/Source/BubbleTransition.swift @@ -3,176 +3,176 @@ // BubbleTransition // // Created by Andrea Mazzini on 04/04/15. -// Copyright (c) 2015 Fancy Pixel. All rights reserved. +// Copyright (c) 2015-2018 Fancy Pixel. All rights reserved. // import UIKit /** A custom modal transition that presents and dismiss a controller with an expanding bubble effect. - + - Prepare the transition: ```swift override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - let controller = segue.destination - controller.transitioningDelegate = self - controller.modalPresentationStyle = .custom + let controller = segue.destination + controller.transitioningDelegate = self + controller.modalPresentationStyle = .custom } ``` - Implement UIViewControllerTransitioningDelegate: ```swift func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { - transition.transitionMode = .present - transition.startingPoint = someButton.center - transition.bubbleColor = someButton.backgroundColor! - return transition + transition.transitionMode = .present + transition.startingPoint = someButton.center + transition.bubbleColor = someButton.backgroundColor! + return transition } - + func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { - transition.transitionMode = .dismiss - transition.startingPoint = someButton.center - transition.bubbleColor = someButton.backgroundColor! - return transition + transition.transitionMode = .dismiss + transition.startingPoint = someButton.center + transition.bubbleColor = someButton.backgroundColor! + return transition } ``` */ open class BubbleTransition: NSObject { - - /** - The point that originates the bubble. The bubble starts from this point - and shrinks to it on dismiss - */ - open var startingPoint = CGPoint.zero { - didSet { - bubble.center = startingPoint - } + + /** + The point that originates the bubble. The bubble starts from this point + and shrinks to it on dismiss + */ + open var startingPoint = CGPoint.zero { + didSet { + bubble.center = startingPoint } + } + + /** + The transition duration. The same value is used in both the Present or Dismiss actions + Defaults to `0.5` + */ + open var duration = 0.5 + + /** + The transition direction. Possible values `.present`, `.dismiss` or `.pop` + Defaults to `.Present` + */ + open var transitionMode: BubbleTransitionMode = .present + + /** + The color of the bubble. Make sure that it matches the destination controller's background color. + */ + open var bubbleColor: UIColor = .white + + open fileprivate(set) var bubble = UIView() + + /** + The possible directions of the transition. + + - Present: For presenting a new modal controller + - Dismiss: For dismissing the current controller + - Pop: For a pop animation in a navigation controller + */ + @objc public enum BubbleTransitionMode: Int { + case present, dismiss, pop + } +} + +extension BubbleTransition: UIViewControllerAnimatedTransitioning { + + // MARK: - UIViewControllerAnimatedTransitioning + + /** + Required by UIViewControllerAnimatedTransitioning + */ + public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { + return duration + } + + /** + Required by UIViewControllerAnimatedTransitioning + */ + public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - /** - The transition duration. The same value is used in both the Present or Dismiss actions - Defaults to `0.5` - */ - open var duration = 0.5 + let containerView = transitionContext.containerView - /** - The transition direction. Possible values `.present`, `.dismiss` or `.pop` - Defaults to `.Present` - */ - open var transitionMode: BubbleTransitionMode = .present + let fromViewController = transitionContext.viewController(forKey: .from) + let toViewController = transitionContext.viewController(forKey: .to) - /** - The color of the bubble. Make sure that it matches the destination controller's background color. - */ - open var bubbleColor: UIColor = .white + fromViewController?.beginAppearanceTransition(false, animated: true) + toViewController?.beginAppearanceTransition(true, animated: true) - open fileprivate(set) var bubble = UIView() - - /** - The possible directions of the transition. - - - Present: For presenting a new modal controller - - Dismiss: For dismissing the current controller - - Pop: For a pop animation in a navigation controller - */ - @objc public enum BubbleTransitionMode: Int { - case present, dismiss, pop - } -} - -extension BubbleTransition: UIViewControllerAnimatedTransitioning { - - // MARK: - UIViewControllerAnimatedTransitioning - - /** - Required by UIViewControllerAnimatedTransitioning - */ - public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { - return duration - } - - /** - Required by UIViewControllerAnimatedTransitioning - */ - public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - - let containerView = transitionContext.containerView + if transitionMode == .present { + let presentedControllerView = transitionContext.view(forKey: UITransitionContextViewKey.to)! + let originalCenter = presentedControllerView.center + let originalSize = presentedControllerView.frame.size + + bubble = UIView() + bubble.frame = frameForBubble(originalCenter, size: originalSize, start: startingPoint) + bubble.layer.cornerRadius = bubble.frame.size.height / 2 + bubble.center = startingPoint + bubble.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) + bubble.backgroundColor = bubbleColor + containerView.addSubview(bubble) + + presentedControllerView.center = startingPoint + presentedControllerView.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) + presentedControllerView.alpha = 0 + containerView.addSubview(presentedControllerView) + + UIView.animate(withDuration: duration, animations: { + self.bubble.transform = CGAffineTransform.identity + presentedControllerView.transform = CGAffineTransform.identity + presentedControllerView.alpha = 1 + presentedControllerView.center = originalCenter + }, completion: { (_) in + transitionContext.completeTransition(true) + self.bubble.isHidden = true + fromViewController?.endAppearanceTransition() + toViewController?.endAppearanceTransition() + }) + } else { + let key = (transitionMode == .pop) ? UITransitionContextViewKey.to : UITransitionContextViewKey.from + let returningControllerView = transitionContext.view(forKey: key)! + let originalCenter = returningControllerView.center + let originalSize = returningControllerView.frame.size + + bubble.frame = frameForBubble(originalCenter, size: originalSize, start: startingPoint) + bubble.layer.cornerRadius = bubble.frame.size.height / 2 + bubble.center = startingPoint + bubble.isHidden = false + + UIView.animate(withDuration: duration, animations: { + self.bubble.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) + returningControllerView.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) + returningControllerView.center = self.startingPoint + returningControllerView.alpha = 0 - let fromViewController = transitionContext.viewController(forKey: .from) - let toViewController = transitionContext.viewController(forKey: .to) - - fromViewController?.beginAppearanceTransition(false, animated: true) - toViewController?.beginAppearanceTransition(true, animated: true) - - if transitionMode == .present { - let presentedControllerView = transitionContext.view(forKey: UITransitionContextViewKey.to)! - let originalCenter = presentedControllerView.center - let originalSize = presentedControllerView.frame.size - - bubble = UIView() - bubble.frame = frameForBubble(originalCenter, size: originalSize, start: startingPoint) - bubble.layer.cornerRadius = bubble.frame.size.height / 2 - bubble.center = startingPoint - bubble.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) - bubble.backgroundColor = bubbleColor - containerView.addSubview(bubble) - - presentedControllerView.center = startingPoint - presentedControllerView.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) - presentedControllerView.alpha = 0 - containerView.addSubview(presentedControllerView) - - UIView.animate(withDuration: duration, animations: { - self.bubble.transform = CGAffineTransform.identity - presentedControllerView.transform = CGAffineTransform.identity - presentedControllerView.alpha = 1 - presentedControllerView.center = originalCenter - }, completion: { (_) in - transitionContext.completeTransition(true) - self.bubble.isHidden = true - fromViewController?.endAppearanceTransition() - toViewController?.endAppearanceTransition() - }) - } else { - let key = (transitionMode == .pop) ? UITransitionContextViewKey.to : UITransitionContextViewKey.from - let returningControllerView = transitionContext.view(forKey: key)! - let originalCenter = returningControllerView.center - let originalSize = returningControllerView.frame.size - - bubble.frame = frameForBubble(originalCenter, size: originalSize, start: startingPoint) - bubble.layer.cornerRadius = bubble.frame.size.height / 2 - bubble.center = startingPoint - bubble.isHidden = false - - UIView.animate(withDuration: duration, animations: { - self.bubble.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) - returningControllerView.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) - returningControllerView.center = self.startingPoint - returningControllerView.alpha = 0 - - if self.transitionMode == .pop { - containerView.insertSubview(returningControllerView, belowSubview: returningControllerView) - containerView.insertSubview(self.bubble, belowSubview: returningControllerView) - } - }, completion: { (_) in - returningControllerView.center = originalCenter - returningControllerView.removeFromSuperview() - self.bubble.removeFromSuperview() - transitionContext.completeTransition(true) - - fromViewController?.endAppearanceTransition() - toViewController?.endAppearanceTransition() - }) + if self.transitionMode == .pop { + containerView.insertSubview(returningControllerView, belowSubview: returningControllerView) + containerView.insertSubview(self.bubble, belowSubview: returningControllerView) } + }, completion: { (_) in + returningControllerView.center = originalCenter + returningControllerView.removeFromSuperview() + self.bubble.removeFromSuperview() + transitionContext.completeTransition(true) + + fromViewController?.endAppearanceTransition() + toViewController?.endAppearanceTransition() + }) } + } } private extension BubbleTransition { - func frameForBubble(_ originalCenter: CGPoint, size originalSize: CGSize, start: CGPoint) -> CGRect { - let lengthX = fmax(start.x, originalSize.width - start.x) - let lengthY = fmax(start.y, originalSize.height - start.y) - let offset = sqrt(lengthX * lengthX + lengthY * lengthY) * 2 - let size = CGSize(width: offset, height: offset) - - return CGRect(origin: CGPoint.zero, size: size) - } + func frameForBubble(_ originalCenter: CGPoint, size originalSize: CGSize, start: CGPoint) -> CGRect { + let lengthX = fmax(start.x, originalSize.width - start.x) + let lengthY = fmax(start.y, originalSize.height - start.y) + let offset = sqrt(lengthX * lengthX + lengthY * lengthY) * 2 + let size = CGSize(width: offset, height: offset) + + return CGRect(origin: CGPoint.zero, size: size) + } }