From 6b04514580fd445aa3ad4182362c77fea936ec07 Mon Sep 17 00:00:00 2001 From: Gabriel Lievano Date: Tue, 7 May 2024 09:49:52 -0700 Subject: [PATCH] Update CI to 2024 --- .github/workflows/ci-master-only.yml | 4 +- .github/workflows/ci-pull-requests-only.yml | 2 +- .github/workflows/ci.yml | 12 +- AsyncDisplayKit.xcodeproj/project.pbxproj | 9 + CI/build.sh | 4 +- Podfile | 16 +- Source/ASDisplayNode+Yoga.mm | 4 +- SubspecWorkspaces/ASDKListKit/Podfile | 3 +- Texture.podspec | 21 +- build.sh | 294 ++++++-------------- 10 files changed, 129 insertions(+), 240 deletions(-) diff --git a/.github/workflows/ci-master-only.yml b/.github/workflows/ci-master-only.yml index a6086f4ba..1867d3fe1 100644 --- a/.github/workflows/ci-master-only.yml +++ b/.github/workflows/ci-master-only.yml @@ -7,8 +7,8 @@ on: jobs: cocoapods-lint: - env: - DEVELOPER_DIR: /Applications/Xcode_14.2.app/Contents/Developer + env: + DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer name: Verify that podspec lints runs-on: macOS-latest steps: diff --git a/.github/workflows/ci-pull-requests-only.yml b/.github/workflows/ci-pull-requests-only.yml index 74589129a..6d5ee7e03 100644 --- a/.github/workflows/ci-pull-requests-only.yml +++ b/.github/workflows/ci-pull-requests-only.yml @@ -8,7 +8,7 @@ on: jobs: buildsh: env: - DEVELOPER_DIR: /Applications/Xcode_14.2.app/Contents/Developer + DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer strategy: matrix: mode: [cocoapods-lint-default-subspecs, cocoapods-lint-other-subspecs] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a93bf690f..26b4ba932 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,10 +5,10 @@ on: [push, pull_request] jobs: buildsh: env: - DEVELOPER_DIR: /Applications/Xcode_14.2.app/Contents/Developer + DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer strategy: matrix: - mode: [tests, framework, life-without-cocoapods, carthage, examples-pt1, examples-pt2, examples-pt3, examples-pt4] + mode: [tests, framework, life-without-cocoapods, carthage include: - mode: tests name: Build and run tests @@ -18,14 +18,6 @@ jobs: name: Build Texture as a static library - mode: carthage name: Verify that Carthage works - - mode: examples-pt1 - name: Build examples (examples-pt1) - - mode: examples-pt2 - name: Build examples (examples-pt2) - - mode: examples-pt3 - name: Build examples (examples-pt3) - - mode: examples-pt4 - name: Build examples (examples-pt4) name: ${{ matrix.name }} runs-on: macOS-latest steps: diff --git a/AsyncDisplayKit.xcodeproj/project.pbxproj b/AsyncDisplayKit.xcodeproj/project.pbxproj index f6f4fc28b..9ee86c5ca 100644 --- a/AsyncDisplayKit.xcodeproj/project.pbxproj +++ b/AsyncDisplayKit.xcodeproj/project.pbxproj @@ -2616,6 +2616,7 @@ "$(inherited)", ); INFOPLIST_FILE = Tests/TestHost/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)"; @@ -2633,6 +2634,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; INFOPLIST_FILE = Tests/TestHost/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)"; @@ -2766,6 +2768,7 @@ GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; INFOPLIST_FILE = "Tests/AsyncDisplayKitTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AsyncDisplayKitTestHost.app/AsyncDisplayKitTestHost"; @@ -2789,6 +2792,7 @@ GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; INFOPLIST_FILE = "Tests/AsyncDisplayKitTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AsyncDisplayKitTestHost.app/AsyncDisplayKitTestHost"; @@ -2813,6 +2817,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = Source/AsyncDisplayKit.modulemap; MTL_ENABLE_DEBUG_INFO = YES; @@ -2845,6 +2850,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = Source/AsyncDisplayKit.modulemap; MTL_ENABLE_DEBUG_INFO = NO; @@ -2925,6 +2931,7 @@ GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; INFOPLIST_FILE = "Tests/AsyncDisplayKitTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AsyncDisplayKitTestHost.app/AsyncDisplayKitTestHost"; @@ -2942,6 +2949,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; INFOPLIST_FILE = Tests/TestHost/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)"; @@ -2967,6 +2975,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "PROFILE=1"; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = Source/AsyncDisplayKit.modulemap; MTL_ENABLE_DEBUG_INFO = NO; diff --git a/CI/build.sh b/CI/build.sh index 058cef054..1e7d1a243 100755 --- a/CI/build.sh +++ b/CI/build.sh @@ -1,4 +1,4 @@ -#!/bin/bash +q#!/bin/bash set -eo pipefail -./build.sh all \ No newline at end of file +./build.sh all diff --git a/Podfile b/Podfile index c53e55456..a63ec87e6 100644 --- a/Podfile +++ b/Podfile @@ -1,9 +1,21 @@ source 'https://cdn.cocoapods.org/' -platform :ios, '9.0' +platform :ios, '13.0' +ios_deployment_target = Gem::Version.new('13.4') target :'AsyncDisplayKitTests' do - platform :ios, '10.0' + platform :ios, ios_deployment_target use_frameworks! pod 'OCMock', '~>3.6' pod 'iOSSnapshotTestCase/Core', '~> 6.2' + + post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |configuration| + pod_ios_deployment_target = Gem::Version.new(configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET']) + if pod_ios_deployment_target <= app_ios_deployment_target + configuration.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' + end + end + end + end end diff --git a/Source/ASDisplayNode+Yoga.mm b/Source/ASDisplayNode+Yoga.mm index 619f5a780..28188174b 100644 --- a/Source/ASDisplayNode+Yoga.mm +++ b/Source/ASDisplayNode+Yoga.mm @@ -305,7 +305,7 @@ - (void)invalidateCalculatedYogaLayout YGNodeRef yogaNode = self.style.yogaNode; if (yogaNode && [self shouldHaveYogaMeasureFunc]) { // Yoga internally asserts that MarkDirty() may only be called on nodes with a measurement function. - BOOL needsTemporaryMeasureFunc = (YGNodeGetMeasureFunc(yogaNode) == NULL); + BOOL needsTemporaryMeasureFunc = !YGNodeGetMeasureFunc(yogaNode); if (needsTemporaryMeasureFunc) { ASDisplayNodeAssert(self.yogaLayoutInProgress == NO, @"shouldHaveYogaMeasureFunc == YES, and inside a layout pass, but no measure func pointer! %@", self); @@ -378,7 +378,7 @@ - (void)calculateLayoutFromYogaRoot:(ASSizeRange)rootConstrainedSize willApply:( // Prepare all children for the layout pass with the current Yoga tree configuration. ASDisplayNodePerformBlockOnEveryYogaChild(self, ^(ASDisplayNode *_Nonnull node) { node.yogaLayoutInProgress = YES; - ASDisplayNode *yogaParent = node.yogaParent; + ASDisplayNode *yogaParent = node.yogaParent; if (yogaParent) { node.style.parentAlignStyle = yogaParent.style.alignItems; } else { diff --git a/SubspecWorkspaces/ASDKListKit/Podfile b/SubspecWorkspaces/ASDKListKit/Podfile index 0f2828e60..aaa6f7eb2 100644 --- a/SubspecWorkspaces/ASDKListKit/Podfile +++ b/SubspecWorkspaces/ASDKListKit/Podfile @@ -1,9 +1,8 @@ source 'https://cdn.cocoapods.org/' -platform :ios, '9.0' +platform :ios, '13.0' target 'ASDKListKitTests' do pod 'Texture/IGListKit', :path => '../..' pod 'OCMock', '~> 3.4' pod 'JGMethodSwizzler', :git => 'https://github.com/JonasGessner/JGMethodSwizzler', :branch => 'master' end - diff --git a/Texture.podspec b/Texture.podspec index 86caec693..31e929a42 100644 --- a/Texture.podspec +++ b/Texture.podspec @@ -11,8 +11,8 @@ Pod::Spec.new do |spec| spec.documentation_url = 'http://texturegroup.org/appledoc/' - spec.ios.deployment_target = '9.0' - spec.tvos.deployment_target = '9.0' + spec.ios.deployment_target = '13.4' + spec.tvos.deployment_target = '13.4' # Subspecs spec.subspec 'Core' do |core| @@ -28,10 +28,10 @@ Pod::Spec.new do |spec| 'Source/TextExperiment/Component/*.h', 'Source/TextExperiment/String/ASTextAttribute.h', ] - + core.source_files = [ 'Source/**/*.{h,mm}', - + # Most TextKit components are not public because the C++ content # in the headers will cause build errors when using # `use_frameworks!` on 0.39.0 & Swift 2.1. @@ -39,7 +39,7 @@ Pod::Spec.new do |spec| 'Source/TextKit/*.h', ] end - + spec.subspec 'PINRemoteImage' do |pin| pin.dependency 'PINRemoteImage/iOS', '~> 3.0.0' pin.dependency 'PINRemoteImage/PINCache' @@ -53,11 +53,12 @@ Pod::Spec.new do |spec| end spec.subspec 'Yoga' do |yoga| + yoga.ios.deployment_target = '13.4' yoga.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) YOGA=1' } - yoga.dependency 'Yoga', '1.6.0' + yoga.dependency 'Yoga', '1.14.0' yoga.dependency 'Texture/Core' end - + # If flag is enabled the old TextNode with all dependencies will be compiled out spec.subspec 'TextNode2' do |text_node| text_node.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) AS_ENABLE_TEXTNODE=0' } @@ -68,7 +69,7 @@ Pod::Spec.new do |spec| video.frameworks = ['AVFoundation', 'CoreMedia'] video.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) AS_USE_VIDEO=1' } video.dependency 'Texture/Core' - end + end spec.subspec 'MapKit' do |map| map.frameworks = ['CoreLocation', 'MapKit'] @@ -97,6 +98,6 @@ Pod::Spec.new do |spec| spec.pod_target_xcconfig = { 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++11', 'CLANG_CXX_LIBRARY' => 'libc++' - } - + } + end diff --git a/build.sh b/build.sh index 886d8ced6..c94bb85c9 100755 --- a/build.sh +++ b/build.sh @@ -9,71 +9,34 @@ # echo ************* diagnostics end # run this on a 2x device until we've updated snapshot images to 3x -PLATFORM="${TEXTURE_BUILD_PLATFORM:-platform=iOS Simulator,OS=16.2,name=iPhone SE (3rd generation)}" -SDK="${TEXTURE_BUILD_SDK:-iphonesimulator16.2}" +PLATFORM="${TEXTURE_BUILD_PLATFORM:-platform=iOS Simulator,OS=17.4,name=iPhone SE (3rd generation)}" +SDK="${TEXTURE_BUILD_SDK:-iphonesimulator17.4}" DERIVED_DATA_PATH="~/ASDKDerivedData" # It is pitch black. set -e function trap_handler { - echo -e "\n\nOh no! You walked directly into the slavering fangs of a lurking grue!" - echo "**** You have died ****" - exit 255 + echo -e "\n\nOh no! You walked directly into the slavering fangs of a lurking grue!" + echo "**** You have died ****" + exit 255 } trap trap_handler INT TERM EXIT # Derived data handling eval [ ! -d $DERIVED_DATA_PATH ] && eval mkdir $DERIVED_DATA_PATH function clean_derived_data { - eval find $DERIVED_DATA_PATH -mindepth 1 -delete -} - -# Build example -function build_example { - example="$1" - - clean_derived_data - - if [ -f "${example}/Podfile" ]; then - echo "Using CocoaPods" - pod install --project-directory=$example - - set -o pipefail && xcodebuild \ - -workspace "${example}/Sample.xcworkspace" \ - -scheme Sample \ - -sdk "$SDK" \ - -destination "$PLATFORM" \ - -derivedDataPath "$DERIVED_DATA_PATH" \ - build - elif [ -f "${example}/Cartfile" ]; then - echo "Using Carthage" - local_repo=`pwd` - current_branch=`git rev-parse --abbrev-ref HEAD` - cd $example - - echo "git \"file://${local_repo}\" \"${current_branch}\"" > "Cartfile" - carthage update --platform iOS - - set -o pipefail && xcodebuild \ - -project "Sample.xcodeproj" \ - -scheme Sample \ - -sdk "$SDK" \ - -destination "$PLATFORM" \ - build - - cd ../.. - fi + eval find $DERIVED_DATA_PATH -mindepth 1 -delete } # Lint subspec function lint_subspec { - set -o pipefail && pod env && pod lib lint --allow-warnings --subspec="$1" + set -o pipefail && pod env && pod lib lint --verbose --allow-warnings --subspec="$1" } function cleanup { - # remove all Pods directories - find . -name Pods -type d -exec rm -rf {} + - find . -name Podfile.lock -type f -delete + # remove all Pods directories + find . -name Pods -type d -exec rm -rf {} + + find . -name Podfile.lock -type f -delete } MODE="$1" @@ -81,183 +44,96 @@ MODE="$1" cleanup case "$MODE" in -tests|all) - echo "Building & testing AsyncDisplayKit." - pod install - set -o pipefail && xcodebuild \ - -workspace AsyncDisplayKit.xcworkspace \ - -scheme AsyncDisplayKit \ - -sdk "$SDK" \ - -destination "$PLATFORM" \ - build-for-testing test - success="1" - ;; +tests | all) + echo "Building & testing AsyncDisplayKit." + pod install + set -o pipefail && xcodebuild \ + -workspace AsyncDisplayKit.xcworkspace \ + -scheme AsyncDisplayKit \ + -sdk "$SDK" \ + -destination "$PLATFORM" \ + build-for-testing test + success="1" + ;; tests_listkit) - echo "Building & testing AsyncDisplayKit+IGListKit." - pod install --project-directory=SubspecWorkspaces/ASDKListKit - set -o pipefail && xcodebuild \ - -workspace SubspecWorkspaces/ASDKListKit/ASDKListKit.xcworkspace \ - -scheme ASDKListKitTests \ - -sdk "$SDK" \ - -destination "$PLATFORM" \ - build-for-testing test - success="1" - ;; - -examples|all) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in examples/*/; do - echo "Building (examples) $example." - - build_example $example - done - success="1" - ;; - -examples-pt1) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | head -6); do - echo "Building (examples-pt1) $example" - - build_example $example - done - success="1" - ;; - -examples-pt2) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | head -11 | tail -5); do - echo "Building (examples-pt2) $example" - - build_example $example - done - success="1" - ;; - -examples-pt3) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | head -16 | tail -5); do - echo "Building (examples-pt3) $example" - - build_example $example - done - success="1" - ;; - -examples-pt4) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | tail -n +17); do - echo "Building (examples-pt4) $example" - - build_example $example - done - success="1" - ;; - -examples-extra-pt1) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples_extra -type d -maxdepth 1 \( ! -iname ".*" \)) | head -6); do - echo "Building (examples-extra-pt1) $example" - - build_example $example - done - success="1" - ;; - -examples-extra-pt2) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples_extra -type d -maxdepth 1 \( ! -iname ".*" \)) | head -11 | tail -5); do - echo "Building (examples-extra-pt2) $example" - - build_example $example - done - success="1" - ;; - -examples-extra-pt3) - echo "Verifying that all AsyncDisplayKit examples compile." - for example in $((find ./examples_extra -type d -maxdepth 1 \( ! -iname ".*" \)) | tail -n +12); do - echo "Building (examples-extra-pt3) $example" - - build_example $example - done - success="1" - ;; - -example) - # Support building a specific example: sh build.sh example examples/ASDKLayoutTransition - echo "Verifying $2 compiles." - build_example $2 - success="1" - ;; - -life-without-cocoapods|all) - echo "Verifying that AsyncDisplayKit functions as a static library." - - set -o pipefail && xcodebuild \ - -workspace "smoke-tests/Life Without CocoaPods/Life Without CocoaPods.xcworkspace" \ - -scheme "Life Without CocoaPods" \ - -sdk "$SDK" \ - -destination "$PLATFORM" \ - build - success="1" - ;; - -framework|all) - echo "Verifying that AsyncDisplayKit functions as a dynamic framework (for Swift/Carthage users)." - - set -o pipefail && xcodebuild \ - -project "smoke-tests/Framework/Sample.xcodeproj" \ - -scheme Sample \ - -sdk "$SDK" \ - -destination "$PLATFORM" \ - build - success="1" - ;; - -cocoapods-lint|all) - echo "Verifying that podspec lints." - - set -o pipefail && pod env && pod lib lint - success="1" - ;; + echo "Building & testing AsyncDisplayKit+IGListKit." + pod install --project-directory=SubspecWorkspaces/ASDKListKit + set -o pipefail && xcodebuild \ + -workspace SubspecWorkspaces/ASDKListKit/ASDKListKit.xcworkspace \ + -scheme ASDKListKitTests \ + -sdk "$SDK" \ + -destination "$PLATFORM" \ + build-for-testing test + success="1" + ;; + +life-without-cocoapods | all) + echo "Verifying that AsyncDisplayKit functions as a static library." + + set -o pipefail && xcodebuild \ + -workspace "smoke-tests/Life Without CocoaPods/Life Without CocoaPods.xcworkspace" \ + -scheme "Life Without CocoaPods" \ + -sdk "$SDK" \ + -destination "$PLATFORM" \ + build + success="1" + ;; + +framework | all) + echo "Verifying that AsyncDisplayKit functions as a dynamic framework (for Swift/Carthage users)." + + set -o pipefail && xcodebuild \ + -project "smoke-tests/Framework/Sample.xcodeproj" \ + -scheme Sample \ + -sdk "$SDK" \ + -destination "$PLATFORM" \ + build + success="1" + ;; + +cocoapods-lint | all) + echo "Verifying that podspec lints." + + set -o pipefail && pod env && pod lib lint + success="1" + ;; cocoapods-lint-default-subspecs) - echo "Verifying that default subspecs lint." + echo "Verifying that default subspecs lint." - for subspec in 'Core' 'PINRemoteImage' 'Video' 'MapKit' 'AssetsLibrary' 'Photos'; do - echo "Verifying that $subspec subspec lints." + for subspec in 'Core' 'PINRemoteImage' 'Video' 'MapKit' 'AssetsLibrary' 'Photos'; do + echo "Verifying that $subspec subspec lints." - lint_subspec $subspec - done - success="1" - ;; + lint_subspec $subspec + done + success="1" + ;; cocoapods-lint-other-subspecs) - echo "Verifying that other subspecs lint." + echo "Verifying that other subspecs lint." - for subspec in 'IGListKit' 'Yoga' 'TextNode2'; do - echo "Verifying that $subspec subspec lints." + for subspec in 'IGListKit' 'Yoga' 'TextNode2'; do + echo "Verifying that $subspec subspec lints." - lint_subspec $subspec - done - success="1" - ;; + lint_subspec $subspec + done + success="1" + ;; -carthage|all) - echo "Verifying carthage works." +carthage | all) + echo "Verifying carthage works." - set -o pipefail && carthage update && carthage build --no-skip-current - success="1" - ;; + set -o pipefail && carthage update && carthage build --no-skip-current + success="1" + ;; *) - echo "Unrecognized mode '$MODE'." - ;; + echo "Unrecognized mode '$MODE'." + ;; esac if [ "$success" = "1" ]; then - trap - EXIT - exit 0 + trap - EXIT + exit 0 fi