diff --git a/Cartfile.resolved b/Cartfile.resolved index e7d7bbfc..30a4378e 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,3 +1,3 @@ git "https://chromium.googlesource.com/webm/libwebp" "v1.1.0" -github "pinterest/PINCache" "3.0.1" -github "pinterest/PINOperation" "1.2.0" +github "pinterest/PINCache" "3.0.3" +github "pinterest/PINOperation" "1.2.1" diff --git a/Carthage/Checkouts/PINCache/.github/workflows/ci.yaml b/Carthage/Checkouts/PINCache/.github/workflows/ci.yaml index 71c75fe7..bdc6a36a 100644 --- a/Carthage/Checkouts/PINCache/.github/workflows/ci.yaml +++ b/Carthage/Checkouts/PINCache/.github/workflows/ci.yaml @@ -11,41 +11,43 @@ on: - master jobs: - build: - name: Build + test: + name: Test runs-on: macOS-latest strategy: matrix: platform: ['iOS Simulator,name=iPhone 8'] steps: - - uses: actions/checkout@v1 - - name: Analyze and Test - run: | - xcodebuild clean analyze test \ - -destination "platform=${{ matrix.platform }}" \ - -sdk "iphonesimulator" \ - -project PINCache.xcodeproj \ - -scheme PINCache \ - ONLY_ACTIVE_ARCH=NO \ - CODE_SIGNING_REQUIRED=NO \ - CLANG_ANALYZER_OUTPUT=plist-html \ - CLANG_ANALYZER_OUTPUT_DIR="$(pwd)/clang" \ - | xcpretty - if [[ -n `find $(pwd)/clang -name "*.html"` ]] ; then rm -rf $(pwd)/clang; exit 1; fi - rm -rf $(pwd)/clang + - uses: actions/checkout@v2 + - name: Test + run: make test + analyze: + name: Analyze + runs-on: macOS-latest + steps: + - uses: actions/checkout@v2 + - name: analyze + run: make analyze cocoapods: name: CocoaPods runs-on: macOS-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Lint - run: pod lib lint + run: make cocoapods carthage: name: Carthage runs-on: macOS-latest steps: - - uses: actions/checkout@v1 - - name: Update - run: carthage update --no-use-binaries --no-build - - name: Build - run: carthage build --no-skip-current + - uses: actions/checkout@v2 + - name: carthage + run: make carthage + swift-package-manager: + runs-on: macos-latest + env: + DEVELOPER_DIR: /Applications/Xcode_12.app/Contents/Developer + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Verify that PINCache can be build by SPM + run: make spm diff --git a/Carthage/Checkouts/PINCache/.github/workflows/publish_release.yml b/Carthage/Checkouts/PINCache/.github/workflows/publish_release.yml new file mode 100644 index 00000000..9a2cf58b --- /dev/null +++ b/Carthage/Checkouts/PINCache/.github/workflows/publish_release.yml @@ -0,0 +1,39 @@ +name: Create Release +on: + workflow_dispatch: + inputs: + release-type: + description: 'The type of release. Must be major, minor or patch' + required: true +jobs: + create_release: + runs-on: macOS-latest + steps: + - uses: actions/checkout@v2 + # Make sure we can lint before creating the release. + - name: Cocoapods lint + run: make cocoapods + - name: Create Release Branch + env: + GITHUB_CHANGELOG_API_KEY: ${{ secrets.GITHUB_TOKEN }} + OSS_PROJECT: PINCache + run: | + gem install github_changelog_generator + Scripts/release.sh --${{ github.event.inputs.release-type }} + git push origin HEAD + - name: Tag Release + run: Scripts/tag-release-branch.sh + - name: Publish Release + uses: actions/create-release@v1 + env: + GITHUB_CHANGELOG_API_KEY: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.RELEASE_TAG }} + release_name: ${{ env.RELEASE_TAG }} + body_path: RELEASE_NOTES.md + draft: false + - name: Push to Cocoapods + env: + COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} + run: pod trunk push diff --git a/Carthage/Checkouts/PINCache/.github_changelog_generator b/Carthage/Checkouts/PINCache/.github_changelog_generator index d0b7a525..71e4626b 100644 --- a/Carthage/Checkouts/PINCache/.github_changelog_generator +++ b/Carthage/Checkouts/PINCache/.github_changelog_generator @@ -1,3 +1,3 @@ issues=false -since-tag=3.0.1-beta.8 -future-release=3.0.1 \ No newline at end of file +since-tag=3.0.2 +future-release=3.0.3 diff --git a/Carthage/Checkouts/PINCache/.gitignore b/Carthage/Checkouts/PINCache/.gitignore index 7f818743..0046cbf2 100644 --- a/Carthage/Checkouts/PINCache/.gitignore +++ b/Carthage/Checkouts/PINCache/.gitignore @@ -23,3 +23,8 @@ xcuserdata /.buckd Carthage/Build + +# SPM +.swiftpm/ +.build/ +Package.resolved diff --git a/Carthage/Checkouts/PINCache/CHANGELOG.md b/Carthage/Checkouts/PINCache/CHANGELOG.md index 8d30a13f..4ad6ac04 100644 --- a/Carthage/Checkouts/PINCache/CHANGELOG.md +++ b/Carthage/Checkouts/PINCache/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [3.0.3](https://github.com/Pinterest/PINCache/tree/3.0.3) (2020-10-22) + +[Full Changelog](https://github.com/Pinterest/PINCache/compare/3.0.2...3.0.3) + + +- Update PINOperation to fix imports [\#293](https://github.com/pinterest/PINCache/pull/293) ([garrettmoon](https://github.com/garrettmoon)) +- Add support for automated releases [\#292](https://github.com/pinterest/PINCache/pull/292) ([garrettmoon](https://github.com/garrettmoon)) +- Fix up imports [\#290](https://github.com/pinterest/PINCache/pull/290) ([garrettmoon](https://github.com/garrettmoon)) +- Fix build issues by removing nested PINOperation.xcodeproj [\#282](https://github.com/pinterest/PINCache/pull/282) ([elliottwilliams](https://github.com/elliottwilliams)) + +## [3.0.2](https://github.com/Pinterest/PINCache/tree/3.0.2) (2020-10-06) + +[Full Changelog](https://github.com/Pinterest/PINCache/compare/3.0.1...3.0.2) + +**Merged pull requests:** + +- Update checkout action [\#287](https://github.com/pinterest/PINCache/pull/287) ([garrettmoon](https://github.com/garrettmoon)) +- Use make commands on the CI so it actually fails [\#286](https://github.com/pinterest/PINCache/pull/286) ([garrettmoon](https://github.com/garrettmoon)) +- Added SPM support [\#283](https://github.com/pinterest/PINCache/pull/283) ([3a4oT](https://github.com/3a4oT)) +- Fix PINCaching compiling in Xcode 12.0b6 \(\#275\) [\#281](https://github.com/pinterest/PINCache/pull/281) ([sagesse-cn](https://github.com/sagesse-cn)) + ## [3.0.1](https://github.com/Pinterest/PINCache/tree/3.0.1) (2020-08-20) [Full Changelog](https://github.com/Pinterest/PINCache/compare/3.0.1-beta.8...3.0.1) diff --git a/Carthage/Checkouts/PINCache/Cartfile b/Carthage/Checkouts/PINCache/Cartfile index a7e3d640..9265ddf2 100644 --- a/Carthage/Checkouts/PINCache/Cartfile +++ b/Carthage/Checkouts/PINCache/Cartfile @@ -1 +1 @@ -github "pinterest/PINOperation" ~> 1.2.0 \ No newline at end of file +github "pinterest/PINOperation" ~> 1.2.1 \ No newline at end of file diff --git a/Carthage/Checkouts/PINCache/Makefile b/Carthage/Checkouts/PINCache/Makefile index 30b505cd..b69eb70a 100644 --- a/Carthage/Checkouts/PINCache/Makefile +++ b/Carthage/Checkouts/PINCache/Makefile @@ -2,13 +2,13 @@ PLATFORM="platform=iOS Simulator,name=iPhone 8" SDK="iphonesimulator" SHELL=/bin/bash -o pipefail -.PHONY: all lint test carthage analyze +.PHONY: all cocoapods test carthage analyze spm -lint: +cocoapods: pod lib lint analyze: - xcodebuild clean analyze -destination ${PLATFORM} -sdk ${SDK} -project PINCache.xcodeproj -scheme PINCache \ + xcodebuild clean analyze -destination ${PLATFORM} -sdk ${SDK} -workspace PINCache.xcworkspace -scheme PINCache \ ONLY_ACTIVE_ARCH=NO \ CODE_SIGNING_REQUIRED=NO \ CLANG_ANALYZER_OUTPUT=plist-html \ @@ -17,7 +17,7 @@ analyze: rm -rf $(shell pwd)/clang test: - xcodebuild clean test -destination ${PLATFORM} -sdk ${SDK} -project PINCache.xcodeproj -scheme PINCache \ + xcodebuild clean test -destination ${PLATFORM} -sdk ${SDK} -workspace PINCache.xcworkspace -scheme PINCache \ ONLY_ACTIVE_ARCH=NO \ CODE_SIGNING_REQUIRED=NO | xcpretty @@ -25,4 +25,10 @@ carthage: carthage update --no-use-binaries --no-build carthage build --no-skip-current -all: carthage lint test analyze +spm: +# For now just check whether we can assemble it +# TODO: replace it with "swift test --enable-test-discovery --sanitize=thread" when swiftPM resource-related bug would be fixed. +# https://bugs.swift.org/browse/SR-13560 + swift build + +all: carthage cocoapods test analyze spm diff --git a/Carthage/Checkouts/PINCache/PINCache.podspec b/Carthage/Checkouts/PINCache/PINCache.podspec index e1dc9cfb..a8f95f39 100644 --- a/Carthage/Checkouts/PINCache/PINCache.podspec +++ b/Carthage/Checkouts/PINCache/PINCache.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'PINCache' - s.version = '3.0.1' + s.version = '3.0.3' s.homepage = 'https://github.com/pinterest/PINCache' s.summary = 'Fast, thread safe, parallel object cache for iOS and OS X.' s.authors = { 'Garrett Moon' => 'garrett@pinterest.com', 'Justin Ouellette' => 'jstn@tumblr.com' } @@ -22,7 +22,7 @@ EOS s.prefix_header_contents = pch_PIN s.subspec 'Core' do |sp| sp.source_files = 'Source/*.{h,m}' - sp.dependency 'PINOperation', '~> 1.2.0' + sp.dependency 'PINOperation', '~> 1.2.1' end s.subspec 'Arc-exception-safe' do |sp| sp.dependency 'PINCache/Core' diff --git a/Carthage/Checkouts/PINCache/PINCache.xcodeproj/project.pbxproj b/Carthage/Checkouts/PINCache/PINCache.xcodeproj/project.pbxproj index e4d3d687..5b927448 100644 --- a/Carthage/Checkouts/PINCache/PINCache.xcodeproj/project.pbxproj +++ b/Carthage/Checkouts/PINCache/PINCache.xcodeproj/project.pbxproj @@ -17,9 +17,6 @@ 320117CC24444E3D004FD783 /* PINMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CC01060B1E271A9000890935 /* PINMemoryCache.m */; }; 320117CD24444E3D004FD783 /* PINCacheMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A0FBFF1E4D3282000B552D /* PINCacheMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6818C1491E55020400875DB7 /* PINCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC0105CE1E271A4900890935 /* PINCache.framework */; }; - 6818C2881E55217D00875DB7 /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6818C2871E55217D00875DB7 /* PINOperation.framework */; }; - 6818C28A1E55218400875DB7 /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6818C2891E55218400875DB7 /* PINOperation.framework */; }; - 6818C28C1E55218A00875DB7 /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6818C28B1E55218A00875DB7 /* PINOperation.framework */; }; 687BB0AA1E52706B005D70C6 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CC0106CA1E28248800890935 /* Default-568h@2x.png */; }; 68A0FC001E4D32C4000B552D /* PINCacheMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A0FBFF1E4D3282000B552D /* PINCacheMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; 68A0FC011E4D32C6000B552D /* PINCacheMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A0FBFF1E4D3282000B552D /* PINCacheMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -60,86 +57,16 @@ CC0106C81E28226A00890935 /* PINCacheTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CC01060D1E271A9000890935 /* PINCacheTests.m */; }; CC0106CD1E28249C00890935 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CC0106CA1E28248800890935 /* Default-568h@2x.png */; }; CC0106CE1E28249D00890935 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CC0106CA1E28248800890935 /* Default-568h@2x.png */; }; + DD275346250AF8BC003A77F9 /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD275345250AF8BC003A77F9 /* PINOperation.framework */; }; + DD275348250AF8C9003A77F9 /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD275347250AF8C9003A77F9 /* PINOperation.framework */; }; + DD27534A250AF8D0003A77F9 /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD275349250AF8D0003A77F9 /* PINOperation.framework */; }; + DDF93F55252D585200C6A4DC /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDF93F54252D585200C6A4DC /* PINOperation.framework */; }; + DDF93F59252D585C00C6A4DC /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDF93F58252D585C00C6A4DC /* PINOperation.framework */; }; + DDF93F5D252D586100C6A4DC /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDF93F5C252D586100C6A4DC /* PINOperation.framework */; }; + DDF93F61252D587100C6A4DC /* PINOperation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDF93F60252D587100C6A4DC /* PINOperation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 320117AC24444DF7004FD783 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 3201178C24444859004FD783; - remoteInfo = "PINOperation-watchOS"; - }; - 320117B424444E23004FD783 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 3201178B24444859004FD783; - remoteInfo = "PINOperation-watchOS"; - }; - 6818C2991E564C1100875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CC01052D1E27110D00890935; - remoteInfo = PINOperation; - }; - 6818C29B1E564C1100875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CC0105561E27116600890935; - remoteInfo = PINOperationTests; - }; - 6818C29D1E564C1100875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CC01053D1E27113700890935; - remoteInfo = "PINOperation-tvOS"; - }; - 6818C29F1E564C1100875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CC0105651E27117300890935; - remoteInfo = "PINOperation-tvOSTests"; - }; - 6818C2A11E564C1100875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CC01054A1E27114300890935; - remoteInfo = "PINOperation-macOS"; - }; - 6818C2A31E564C1100875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = CC0105741E27117F00890935; - remoteInfo = "PINOperation-macOSTests"; - }; - 6818C2A51E564C2000875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = CC01052C1E27110D00890935; - remoteInfo = PINOperation; - }; - 6818C2A71E564C2A00875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = CC01053C1E27113700890935; - remoteInfo = "PINOperation-tvOS"; - }; - 6818C2A91E564C2F00875DB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = CC0105491E27114300890935; - remoteInfo = "PINOperation-macOS"; - }; CC0105E01E271A5C00890935 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = CC0105A81E271A1600890935 /* Project object */; @@ -195,10 +122,6 @@ /* Begin PBXFileReference section */ 320117A124444DF7004FD783 /* PINCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PINCache.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6818C2871E55217D00875DB7 /* PINOperation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PINOperation.framework; path = "../../Library/Developer/Xcode/DerivedData/PINCache-cxjnintatqynfgceozwzgezmeypl/Build/Products/Debug-iphonesimulator/PINOperation.framework"; sourceTree = ""; }; - 6818C2891E55218400875DB7 /* PINOperation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PINOperation.framework; path = "../../Library/Developer/Xcode/DerivedData/PINCache-cxjnintatqynfgceozwzgezmeypl/Build/Products/Debug-appletvsimulator/PINOperation.framework"; sourceTree = ""; }; - 6818C28B1E55218A00875DB7 /* PINOperation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PINOperation.framework; path = Carthage/Checkouts/PINOperation/build/Debug/PINOperation.framework; sourceTree = ""; }; - 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PINOperation.xcodeproj; path = Carthage/Checkouts/PINOperation/PINOperation.xcodeproj; sourceTree = ""; }; 68A0FBFF1E4D3282000B552D /* PINCacheMacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PINCacheMacros.h; sourceTree = ""; }; 6928EED21E4160EE00B5D975 /* PINCaching.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PINCaching.h; sourceTree = ""; }; C30EE1E9203717DE00D78CB9 /* NSDate+PINCacheTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDate+PINCacheTests.h"; sourceTree = ""; }; @@ -223,6 +146,15 @@ CC0106C51E281D6900890935 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CC0106C91E28228300890935 /* PINCacheTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PINCacheTests.h; sourceTree = ""; }; CC0106CA1E28248800890935 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + DD275345250AF8BC003A77F9 /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DD275347250AF8C9003A77F9 /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DD275349250AF8D0003A77F9 /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDF93F50252D582E00C6A4DC /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDF93F52252D583B00C6A4DC /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDF93F54252D585200C6A4DC /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDF93F58252D585C00C6A4DC /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDF93F5C252D586100C6A4DC /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDF93F60252D587100C6A4DC /* PINOperation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PINOperation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -230,6 +162,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DDF93F61252D587100C6A4DC /* PINOperation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -237,6 +170,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DDF93F55252D585200C6A4DC /* PINOperation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -244,6 +178,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DDF93F59252D585C00C6A4DC /* PINOperation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -251,6 +186,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DDF93F5D252D586100C6A4DC /* PINOperation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -258,7 +194,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6818C2881E55217D00875DB7 /* PINOperation.framework in Frameworks */, + DD275346250AF8BC003A77F9 /* PINOperation.framework in Frameworks */, CC0105DF1E271A5C00890935 /* PINCache.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -267,7 +203,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6818C28A1E55218400875DB7 /* PINOperation.framework in Frameworks */, + DD275348250AF8C9003A77F9 /* PINOperation.framework in Frameworks */, CC0105EE1E271A6400890935 /* PINCache.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -276,7 +212,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6818C28C1E55218A00875DB7 /* PINOperation.framework in Frameworks */, + DD27534A250AF8D0003A77F9 /* PINOperation.framework in Frameworks */, 6818C1491E55020400875DB7 /* PINCache.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -287,31 +223,22 @@ 6818C2861E55217D00875DB7 /* Frameworks */ = { isa = PBXGroup; children = ( - 6818C28B1E55218A00875DB7 /* PINOperation.framework */, - 6818C2891E55218400875DB7 /* PINOperation.framework */, - 6818C2871E55217D00875DB7 /* PINOperation.framework */, + DDF93F60252D587100C6A4DC /* PINOperation.framework */, + DDF93F5C252D586100C6A4DC /* PINOperation.framework */, + DDF93F58252D585C00C6A4DC /* PINOperation.framework */, + DDF93F54252D585200C6A4DC /* PINOperation.framework */, + DDF93F52252D583B00C6A4DC /* PINOperation.framework */, + DDF93F50252D582E00C6A4DC /* PINOperation.framework */, + DD275349250AF8D0003A77F9 /* PINOperation.framework */, + DD275347250AF8C9003A77F9 /* PINOperation.framework */, + DD275345250AF8BC003A77F9 /* PINOperation.framework */, ); name = Frameworks; sourceTree = ""; }; - 6818C2911E564C1100875DB7 /* Products */ = { - isa = PBXGroup; - children = ( - 6818C29A1E564C1100875DB7 /* PINOperation.framework */, - 6818C29C1E564C1100875DB7 /* PINOperationTests.xctest */, - 6818C29E1E564C1100875DB7 /* PINOperation.framework */, - 6818C2A01E564C1100875DB7 /* PINOperation-tvOSTests.xctest */, - 6818C2A21E564C1100875DB7 /* PINOperation.framework */, - 6818C2A41E564C1100875DB7 /* PINOperation-macOSTests.xctest */, - 320117AD24444DF7004FD783 /* PINOperation.framework */, - ); - name = Products; - sourceTree = ""; - }; CC0105A71E271A1600890935 = { isa = PBXGroup; children = ( - 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */, CC0106031E271A9000890935 /* Source */, CC01060C1E271A9000890935 /* Tests */, CC0105B21E271A1600890935 /* Products */, @@ -444,7 +371,6 @@ buildRules = ( ); dependencies = ( - 320117B524444E23004FD783 /* PBXTargetDependency */, ); name = "PINCache-watchOS"; productName = "PINCache-watchOS"; @@ -463,7 +389,6 @@ buildRules = ( ); dependencies = ( - 6818C2A61E564C2000875DB7 /* PBXTargetDependency */, ); name = PINCache; productName = PINCache; @@ -482,7 +407,6 @@ buildRules = ( ); dependencies = ( - 6818C2A81E564C2A00875DB7 /* PBXTargetDependency */, ); name = "PINCache-tvOS"; productName = "PINCache-tvOS"; @@ -501,7 +425,6 @@ buildRules = ( ); dependencies = ( - 6818C2AA1E564C2F00875DB7 /* PBXTargetDependency */, ); name = "PINCache-macOS"; productName = "PINCache-macOS"; @@ -608,12 +531,6 @@ mainGroup = CC0105A71E271A1600890935; productRefGroup = CC0105B21E271A1600890935 /* Products */; projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 6818C2911E564C1100875DB7 /* Products */; - ProjectRef = 6818C2901E564C1100875DB7 /* PINOperation.xcodeproj */; - }, - ); projectRoot = ""; targets = ( CC0105B01E271A1600890935 /* PINCache */, @@ -627,58 +544,6 @@ }; /* End PBXProject section */ -/* Begin PBXReferenceProxy section */ - 320117AD24444DF7004FD783 /* PINOperation.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PINOperation.framework; - remoteRef = 320117AC24444DF7004FD783 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6818C29A1E564C1100875DB7 /* PINOperation.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PINOperation.framework; - remoteRef = 6818C2991E564C1100875DB7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6818C29C1E564C1100875DB7 /* PINOperationTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = PINOperationTests.xctest; - remoteRef = 6818C29B1E564C1100875DB7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6818C29E1E564C1100875DB7 /* PINOperation.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PINOperation.framework; - remoteRef = 6818C29D1E564C1100875DB7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6818C2A01E564C1100875DB7 /* PINOperation-tvOSTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "PINOperation-tvOSTests.xctest"; - remoteRef = 6818C29F1E564C1100875DB7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6818C2A21E564C1100875DB7 /* PINOperation.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PINOperation.framework; - remoteRef = 6818C2A11E564C1100875DB7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6818C2A41E564C1100875DB7 /* PINOperation-macOSTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "PINOperation-macOSTests.xctest"; - remoteRef = 6818C2A31E564C1100875DB7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - /* Begin PBXResourcesBuildPhase section */ 3201179F24444DF7004FD783 /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -806,26 +671,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 320117B524444E23004FD783 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "PINOperation-watchOS"; - targetProxy = 320117B424444E23004FD783 /* PBXContainerItemProxy */; - }; - 6818C2A61E564C2000875DB7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PINOperation; - targetProxy = 6818C2A51E564C2000875DB7 /* PBXContainerItemProxy */; - }; - 6818C2A81E564C2A00875DB7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "PINOperation-tvOS"; - targetProxy = 6818C2A71E564C2A00875DB7 /* PBXContainerItemProxy */; - }; - 6818C2AA1E564C2F00875DB7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "PINOperation-macOS"; - targetProxy = 6818C2A91E564C2F00875DB7 /* PBXContainerItemProxy */; - }; CC0105E11E271A5C00890935 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = CC0105B01E271A1600890935 /* PINCache */; @@ -857,6 +702,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/watchOS"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -885,6 +731,7 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/watchOS"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; diff --git a/Carthage/Checkouts/PINCache/PINCache.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/PINCache/PINCache.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..4e95af76 --- /dev/null +++ b/Carthage/Checkouts/PINCache/PINCache.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Carthage/Checkouts/PINCache/PINCache.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Carthage/Checkouts/PINCache/PINCache.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Carthage/Checkouts/PINCache/PINCache.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Carthage/Checkouts/PINCache/Package.swift b/Carthage/Checkouts/PINCache/Package.swift new file mode 100644 index 00000000..38447e31 --- /dev/null +++ b/Carthage/Checkouts/PINCache/Package.swift @@ -0,0 +1,47 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "PINCache", + platforms: [ + .macOS(.v10_10), + .iOS(.v9), + .watchOS(.v2), + .tvOS(.v9) + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "PINCache", + targets: ["PINCache"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + .package(url: "https://github.com/pinterest/PINOperation.git", from: "1.2.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "PINCache", + dependencies: ["PINOperation"], + path: "Source", + exclude: ["Carthage", "docs", + "build_docs.sh", "Cartfile", + "Cartfile.resolved", "Makefile", + "PINCache.podspec", "Info.plist"], + publicHeadersPath: "."), + .testTarget( + name: "PINCacheTests", + dependencies: ["PINCache"], + path: "Tests", + exclude: ["Info.plist"], + resources: [.process("Default-568h@2x.png")], + cSettings: [ + .define("TEST_AS_SPM"), + ]), + ] +) diff --git a/Carthage/Checkouts/PINCache/Scripts/release.sh b/Carthage/Checkouts/PINCache/Scripts/release.sh new file mode 100755 index 00000000..fd094a6b --- /dev/null +++ b/Carthage/Checkouts/PINCache/Scripts/release.sh @@ -0,0 +1,98 @@ +#!/bin/bash +set -e + +if [ -z "$OSS_PROJECT" ]; then + echo "Must set \$OSS_PROJECT envirnonment variable before running." +fi + +PROJECT="$OSS_PROJECT" + +if ! git diff-index --quiet HEAD --; then + echo "Please commit or stash any changes before running." + exit 1 +fi + +if [ -z "$GITHUB_CHANGELOG_API_KEY" ]; then + echo "Must set \$GITHUB_CHANGELOG_API_KEY environment variable" + exit 1 +fi + +case $1 in + "--major") + UPDATE_TYPE="major" + ;; + + "--minor") + UPDATE_TYPE="minor" + ;; + + "--patch") + UPDATE_TYPE="patch" + ;; + + *) + echo "Usage release.sh --patch / --minor / --major" + exit 1 + ;; +esac + +PODSPEC="$PROJECT.podspec" +CURRENT_VERSION=`grep "version" -m 1 $PODSPEC | sed -E "s/^.*version[ \t]*=[ \t]*'([0-9\.]+)'/\1/"` +DOT_COUNT=`echo "$CURRENT_VERSION" | grep -o '\.' | wc -l` + +if [ "$DOT_COUNT" -eq "0" ]; then + major=$CURRENT_VERSION + minor="0" + patch="0" +elif [ "$DOT_COUNT" -eq "1" ]; then + major=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)/\1/"` + minor=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)/\2/"` + patch="0" +elif [ "$DOT_COUNT" -eq "2" ]; then + major=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)\.([0-9]+)/\1/"` + minor=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)\.([0-9]+)/\2/"` + patch=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)\.([0-9]+)/\3/"` +fi + +echo "Current version: $major.$minor.$patch" + +if [ "$UPDATE_TYPE" == "major" ]; then + major=$((major + 1)) + minor=0 + patch=0 +elif [ "$UPDATE_TYPE" == "minor" ]; then + minor=$((minor + 1)) + patch=0 +elif [ "$UPDATE_TYPE" == "patch" ]; then + patch=$((patch + 1)) +fi + +NEW_VERSION="$major.$minor.$patch" +echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV +echo "New version: $NEW_VERSION" + +echo "Updating $PODSPEC" +sed -E "s/^(.*version[ \t]*=[ \t]*)'$CURRENT_VERSION'/\1'$NEW_VERSION'/" $PODSPEC > new.podspec +mv new.podspec $PODSPEC + +echo "Updating .github_changelog_generator" +cat << EOF > .github_changelog_generator +issues=false +since-tag=$CURRENT_VERSION +future-release=$NEW_VERSION +EOF + +github_changelog_generator --token $GITHUB_CHANGELOG_API_KEY --user Pinterest --project $PROJECT --output NEW_CHANGES.md + +# Delete # Changelog at the top of the old CHANGELOG +grep -v "# Changelog" CHANGELOG.md > CHANGELOG.tmp && mv CHANGELOG.tmp CHANGELOG.md + +# Delete the last line and first line then use a magic sed command the internet told me +# about to delete trailing newlines (except the last one) +# Then prepend to existing changelog +grep -v "\*" NEW_CHANGES.md | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' | cat - CHANGELOG.md > CHANGELOG.tmp +mv CHANGELOG.tmp CHANGELOG.md +rm NEW_CHANGES.md + +git add .github_changelog_generator CHANGELOG.md $PODSPEC +git commit --message "[AUTO] Update CHANGELOG.md and bump for $UPDATE_TYPE update." diff --git a/Carthage/Checkouts/PINCache/Scripts/tag-release-branch.sh b/Carthage/Checkouts/PINCache/Scripts/tag-release-branch.sh new file mode 100755 index 00000000..a66af230 --- /dev/null +++ b/Carthage/Checkouts/PINCache/Scripts/tag-release-branch.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -ex + +echo "Tagging release branch" +TAG=$NEW_VERSION + +echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV +git tag $TAG +git push origin --tags + +echo "Setting Release Notes" +cat CHANGELOG.md | awk '/^#/{f=1} f; /^#/ && ++c==3{exit}' | sed '$ d' > RELEASE_NOTES.md diff --git a/Carthage/Checkouts/PINCache/Source/PINCache.h b/Carthage/Checkouts/PINCache/Source/PINCache.h index 7ddec1c6..bfc9d850 100644 --- a/Carthage/Checkouts/PINCache/Source/PINCache.h +++ b/Carthage/Checkouts/PINCache/Source/PINCache.h @@ -4,10 +4,10 @@ #import -#import -#import -#import -#import +#import "PINCacheMacros.h" +#import "PINCaching.h" +#import "PINDiskCache.h" +#import "PINMemoryCache.h" NS_ASSUME_NONNULL_BEGIN diff --git a/Carthage/Checkouts/PINCache/Source/PINCache.m b/Carthage/Checkouts/PINCache/Source/PINCache.m index f574e0c0..b52f1f63 100644 --- a/Carthage/Checkouts/PINCache/Source/PINCache.m +++ b/Carthage/Checkouts/PINCache/Source/PINCache.m @@ -4,7 +4,11 @@ #import "PINCache.h" +#if SWIFT_PACKAGE +@import PINOperation; +#else #import +#endif static NSString * const PINCachePrefix = @"com.pinterest.PINCache"; static NSString * const PINCacheSharedName = @"PINCacheShared"; diff --git a/Carthage/Checkouts/PINCache/Source/PINCaching.h b/Carthage/Checkouts/PINCache/Source/PINCaching.h index ebc67063..326cd456 100644 --- a/Carthage/Checkouts/PINCache/Source/PINCaching.h +++ b/Carthage/Checkouts/PINCache/Source/PINCaching.h @@ -17,18 +17,18 @@ NS_ASSUME_NONNULL_BEGIN /** A callback block which provides only the cache as an argument */ -typedef void (^PINCacheBlock)(id cache); +typedef void (^PINCacheBlock)(__kindof id cache); /** A callback block which provides the cache, key and object as arguments */ -typedef void (^PINCacheObjectBlock)(id cache, NSString *key, id _Nullable object); +typedef void (^PINCacheObjectBlock)(__kindof id cache, NSString *key, id _Nullable object); /** A callback block used for enumeration which provides the cache, key and object as arguments plus a stop flag that may be flipped by the caller. */ -typedef void (^PINCacheObjectEnumerationBlock)(id cache, NSString *key, id _Nullable object, BOOL *stop); +typedef void (^PINCacheObjectEnumerationBlock)(__kindof id cache, NSString *key, id _Nullable object, BOOL *stop); /** A callback block which provides a BOOL value as argument diff --git a/Carthage/Checkouts/PINCache/Source/PINDiskCache.h b/Carthage/Checkouts/PINCache/Source/PINDiskCache.h index 224f9ce1..81bb26a4 100644 --- a/Carthage/Checkouts/PINCache/Source/PINDiskCache.h +++ b/Carthage/Checkouts/PINCache/Source/PINDiskCache.h @@ -4,9 +4,9 @@ #import -#import -#import -#import +#import "PINCacheMacros.h" +#import "PINCaching.h" +#import "PINCacheObjectSubscripting.h" NS_ASSUME_NONNULL_BEGIN diff --git a/Carthage/Checkouts/PINCache/Source/PINDiskCache.m b/Carthage/Checkouts/PINCache/Source/PINDiskCache.m index 40e606d8..f30a5ad7 100644 --- a/Carthage/Checkouts/PINCache/Source/PINDiskCache.m +++ b/Carthage/Checkouts/PINCache/Source/PINDiskCache.m @@ -11,7 +11,11 @@ #import #import +#if SWIFT_PACKAGE +@import PINOperation; +#else #import +#endif #define PINDiskCacheError(error) if (error) { NSLog(@"%@ (%d) ERROR: %@", \ [[NSString stringWithUTF8String:__FILE__] lastPathComponent], \ diff --git a/Carthage/Checkouts/PINCache/Source/PINMemoryCache.h b/Carthage/Checkouts/PINCache/Source/PINMemoryCache.h index ef413ce4..1cf9ff88 100644 --- a/Carthage/Checkouts/PINCache/Source/PINMemoryCache.h +++ b/Carthage/Checkouts/PINCache/Source/PINMemoryCache.h @@ -4,9 +4,9 @@ #import -#import -#import -#import +#import "PINCacheMacros.h" +#import "PINCaching.h" +#import "PINCacheObjectSubscripting.h" NS_ASSUME_NONNULL_BEGIN diff --git a/Carthage/Checkouts/PINCache/Source/PINMemoryCache.m b/Carthage/Checkouts/PINCache/Source/PINMemoryCache.m index 9f64c293..85c45f5f 100644 --- a/Carthage/Checkouts/PINCache/Source/PINMemoryCache.m +++ b/Carthage/Checkouts/PINCache/Source/PINMemoryCache.m @@ -5,7 +5,12 @@ #import "PINMemoryCache.h" #import + +#if SWIFT_PACKAGE +@import PINOperation; +#else #import +#endif #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0 #import diff --git a/Carthage/Checkouts/PINCache/Tests/PINCacheTests.m b/Carthage/Checkouts/PINCache/Tests/PINCacheTests.m index b16cb450..0a79a3ed 100644 --- a/Carthage/Checkouts/PINCache/Tests/PINCacheTests.m +++ b/Carthage/Checkouts/PINCache/Tests/PINCacheTests.m @@ -2,11 +2,17 @@ // Modifications by Garrett Moon // Copyright (c) 2015 Pinterest. All rights reserved. +#if SWIFT_PACKAGE +@import PINCache; +@import PINOperation; +#else +#import +#import +#endif + #import "PINCacheTests.h" #import "NSDate+PINCacheTests.h" #import "PINDiskCache+PINCacheTests.h" -#import -#import #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR @@ -22,6 +28,7 @@ @interface PINDiskCache() @property (assign, nonatomic) BOOL diskStateKnown; @property (strong, nonatomic) NSDictionary *metadata; +@property (readonly) PINOperationQueue *operationQueue; + (dispatch_queue_t)sharedTrashQueue; + (NSURL *)sharedTrashURL; @@ -79,8 +86,14 @@ - (PINImage *)image static PINImage *image = nil; if (!image) { +#ifdef TEST_AS_SPM + NSBundle *bun = SWIFTPM_MODULE_BUNDLE; +#else + NSBundle *bun = [NSBundle bundleForClass:self.class]; + +#endif + NSURL *imageURL = [bun URLForResource:@"Default-568h@2x" withExtension:@"png"]; NSError *error = nil; - NSURL *imageURL = [[NSBundle bundleForClass:self.class] URLForResource:@"Default-568h@2x" withExtension:@"png"]; NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL options:NSDataReadingUncached error:&error]; @@ -265,7 +278,6 @@ - (void)testObjectGetWithInvalidKey - (void)testObjectRemove { NSString *key = @"key"; - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); self.cache[key] = [self image]; @@ -278,13 +290,12 @@ - (void)testObjectRemove self.cache.diskCache.didRemoveObjectBlock = ^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { didRemoveObjectBlockCalled = YES; }; - - [self.cache removeObjectForKeyAsync:key completion:^(id cache, NSString *key, id object) { - dispatch_semaphore_signal(semaphore); - }]; - - dispatch_semaphore_wait(semaphore, [self timeout]); + // Clear out operation queue to ensure blocks are set. + [self.cache.diskCache.operationQueue waitUntilAllOperationsAreFinished]; + + [self.cache removeObjectForKey:key]; + id object = self.cache[key]; XCTAssertNil(object, @"object was not removed"); @@ -296,7 +307,6 @@ - (void)testObjectRemoveAll { NSString *key1 = @"key1"; NSString *key2 = @"key2"; - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); self.cache[key1] = key1; self.cache[key2] = key2; @@ -310,12 +320,10 @@ - (void)testObjectRemoveAll self.cache.diskCache.didRemoveAllObjectsBlock = ^(id _Nonnull cache) { didRemoveAllObjectsBlockCalled = YES; }; - - [self.cache removeAllObjectsAsync:^(id cache) { - dispatch_semaphore_signal(semaphore); - }]; - dispatch_semaphore_wait(semaphore, [self timeout]); + [self.cache.diskCache.operationQueue waitUntilAllOperationsAreFinished]; + + [self.cache removeAllObjects]; id object1 = self.cache[key1]; id object2 = self.cache[key2]; @@ -735,13 +743,13 @@ - (void)testAgeLimit }]; dispatch_group_enter(group); - [self.cache.diskCache objectForKeyAsync:key1 completion:^(id cache, NSString *key, id object) { + [self.cache.diskCache objectForKeyAsync:key1 completion:^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { diskObj1 = object; dispatch_group_leave(group); }]; dispatch_group_enter(group); - [self.cache.diskCache objectForKeyAsync:key2 completion:^(id cache, NSString *key, id object) { + [self.cache.diskCache objectForKeyAsync:key2 completion:^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { diskObj2 = object; dispatch_group_leave(group); }]; @@ -778,13 +786,13 @@ - (void)testAgeLimit }]; dispatch_group_enter(group); - [self.cache.diskCache objectForKeyAsync:key1 completion:^(id cache, NSString *key, id object) { + [self.cache.diskCache objectForKeyAsync:key1 completion:^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { diskObj1 = object; dispatch_group_leave(group); }]; dispatch_group_enter(group); - [self.cache.diskCache objectForKeyAsync:key2 completion:^(PINDiskCache *cache, NSString *key, id object) { + [self.cache.diskCache objectForKeyAsync:key2 completion:^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { diskObj2 = object; dispatch_group_leave(group); }]; @@ -909,7 +917,7 @@ - (void)_testTTLCacheObjectAccess { }]; dispatch_group_enter(group); - [self.cache.diskCache objectForKeyAsync:key completion:^(id cache, NSString *key, id object) { + [self.cache.diskCache objectForKeyAsync:key completion:^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { diskObj = object; dispatch_group_leave(group); }]; @@ -933,7 +941,7 @@ - (void)_testTTLCacheObjectAccess { }]; dispatch_group_enter(group); - [self.cache.diskCache objectForKeyAsync:key completion:^(id cache, NSString *key, id object) { + [self.cache.diskCache objectForKeyAsync:key completion:^(PINDiskCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) { diskObj = object; dispatch_group_leave(group); }]; diff --git a/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.h b/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.h index ce487335..fc778cf4 100644 --- a/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.h +++ b/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.h @@ -1,4 +1,4 @@ -#import +#import "PINCache.h" @interface PINDiskCache (PINCacheTests) diff --git a/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.m b/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.m index 3535d43b..fd8a164f 100644 --- a/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.m +++ b/Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.m @@ -15,7 +15,7 @@ @implementation PINDiskCache (PINCacheTests) - (void)setTtlCacheSync:(BOOL)ttlCache { [self lock]; - self->_ttlCache = ttlCache; + [self setValue:@(ttlCache) forKey:@"_ttlCache"]; [self unlock]; } diff --git a/Carthage/Checkouts/PINOperation/.github/workflows/ci.yml b/Carthage/Checkouts/PINOperation/.github/workflows/ci.yml index cfe85acc..4ef71dfe 100644 --- a/Carthage/Checkouts/PINOperation/.github/workflows/ci.yml +++ b/Carthage/Checkouts/PINOperation/.github/workflows/ci.yml @@ -11,70 +11,43 @@ on: - master jobs: - build: - name: Build + test: + name: Test runs-on: macOS-latest strategy: matrix: platform: ['iOS Simulator,name=iPhone 8'] steps: - uses: actions/checkout@v2 - - name: Analyze and Test - run: | - xcodebuild clean analyze test \ - -destination "platform=${{ matrix.platform }}" \ - -sdk "iphonesimulator" \ - -project PINOperation.xcodeproj \ - -scheme PINOperation \ - ONLY_ACTIVE_ARCH=NO \ - CODE_SIGNING_REQUIRED=NO \ - CLANG_ANALYZER_OUTPUT=plist-html \ - CLANG_ANALYZER_OUTPUT_DIR="$(pwd)/clang" \ - | xcpretty - if [[ -n `find $(pwd)/clang -name "*.html"` ]] ; then rm -rf $(pwd)/clang; exit 1; fi - rm -rf $(pwd)/clang + - name: Test + run: make test + analyze: + name: Analyze + runs-on: macOS-latest + steps: + - uses: actions/checkout@v2 + - name: analyze + run: make analyze cocoapods: name: CocoaPods runs-on: macOS-latest steps: - uses: actions/checkout@v2 - - name: Lint - run: pod lib lint + - name: Cocoapods lint + run: make cocoapods carthage: name: Carthage runs-on: macOS-latest steps: - uses: actions/checkout@v2 - - name: Build - run: carthage build --no-skip-current - spm: - name: Swift Package Manager tests - runs-on: macOS-latest + - name: carthage + run: make carthage + swift-package-manager: + runs-on: macos-latest + env: + DEVELOPER_DIR: /Applications/Xcode_12.app/Contents/Developer steps: - - uses: actions/checkout@v2 - - name: Test - run: swift test - example: - name: Build Example project - runs-on: macOS-latest - strategy: - matrix: - platform: ['iOS Simulator,name=iPhone 8'] - steps: - - uses: actions/checkout@v2 - - name: Install Pods - run: cd Example && pod install - - name: Build - run: | - cd Example && xcodebuild clean analyze \ - -destination "platform=${{ matrix.platform }}" \ - -sdk "iphonesimulator" \ - -workspace PINOperationExample.xcworkspace \ - -scheme PINOperationExample \ - ONLY_ACTIVE_ARCH=NO \ - CODE_SIGNING_REQUIRED=NO \ - CLANG_ANALYZER_OUTPUT=plist-html \ - CLANG_ANALYZER_OUTPUT_DIR="$(pwd)/clang" \ - | xcpretty - if [[ -n `find $(pwd)/clang -name "*.html"` ]] ; then rm -rf $(pwd)/clang; exit 1; fi - rm -rf $(pwd)/clang + - name: Checkout + uses: actions/checkout@v2 + - name: Verify that PINCache can be build by SPM + run: make spm diff --git a/Carthage/Checkouts/PINOperation/.github/workflows/publish_release.yml b/Carthage/Checkouts/PINOperation/.github/workflows/publish_release.yml new file mode 100644 index 00000000..47a81bc7 --- /dev/null +++ b/Carthage/Checkouts/PINOperation/.github/workflows/publish_release.yml @@ -0,0 +1,38 @@ +name: Create Release +on: + workflow_dispatch: + inputs: + release-type: + description: 'The type of release. Must be major, minor or patch' + required: true +jobs: + create_release: + runs-on: macOS-latest + steps: + - uses: actions/checkout@v2 + # Make sure we can lint before creating the release. + - name: Cocoapods lint + run: make cocoapods + - name: Create Release Branch + env: + GITHUB_CHANGELOG_API_KEY: ${{ secrets.GITHUB_TOKEN }} + run: | + gem install github_changelog_generator + Scripts/release.sh --${{ github.event.inputs.release-type }} + git push origin HEAD + - name: Tag Release + run: Scripts/tag-release-branch.sh + - name: Publish Release + uses: actions/create-release@v1 + env: + GITHUB_CHANGELOG_API_KEY: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.RELEASE_TAG }} + release_name: ${{ env.RELEASE_TAG }} + body_path: RELEASE_NOTES.md + draft: false + - name: Push to Cocoapods + env: + COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} + run: pod trunk push diff --git a/Carthage/Checkouts/PINOperation/.github/workflows/push_release_branch.yml b/Carthage/Checkouts/PINOperation/.github/workflows/push_release_branch.yml new file mode 100644 index 00000000..47a81bc7 --- /dev/null +++ b/Carthage/Checkouts/PINOperation/.github/workflows/push_release_branch.yml @@ -0,0 +1,38 @@ +name: Create Release +on: + workflow_dispatch: + inputs: + release-type: + description: 'The type of release. Must be major, minor or patch' + required: true +jobs: + create_release: + runs-on: macOS-latest + steps: + - uses: actions/checkout@v2 + # Make sure we can lint before creating the release. + - name: Cocoapods lint + run: make cocoapods + - name: Create Release Branch + env: + GITHUB_CHANGELOG_API_KEY: ${{ secrets.GITHUB_TOKEN }} + run: | + gem install github_changelog_generator + Scripts/release.sh --${{ github.event.inputs.release-type }} + git push origin HEAD + - name: Tag Release + run: Scripts/tag-release-branch.sh + - name: Publish Release + uses: actions/create-release@v1 + env: + GITHUB_CHANGELOG_API_KEY: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.RELEASE_TAG }} + release_name: ${{ env.RELEASE_TAG }} + body_path: RELEASE_NOTES.md + draft: false + - name: Push to Cocoapods + env: + COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} + run: pod trunk push diff --git a/Carthage/Checkouts/PINOperation/.github_changelog_generator b/Carthage/Checkouts/PINOperation/.github_changelog_generator index 19665f65..955d66b6 100644 --- a/Carthage/Checkouts/PINOperation/.github_changelog_generator +++ b/Carthage/Checkouts/PINOperation/.github_changelog_generator @@ -1,3 +1,3 @@ issues=false -since-tag=1.1.1 -future-release=1.2 +since-tag=1.2 +future-release=1.2.1 diff --git a/Carthage/Checkouts/PINOperation/BUCK b/Carthage/Checkouts/PINOperation/BUCK deleted file mode 100755 index c7ade9d1..00000000 --- a/Carthage/Checkouts/PINOperation/BUCK +++ /dev/null @@ -1,22 +0,0 @@ -apple_library( - name = 'PINOperation', - modular = True, - exported_headers = glob(['Source/*.h']), - srcs = - glob(['Source/*.m']), - preprocessor_flags = ['-fobjc-arc'], - lang_preprocessor_flags = { - 'C': ['-std=gnu99'], - 'CXX': ['-std=gnu++11', '-stdlib=libc++'], - }, - linker_flags = [ - '-weak_framework', - 'UIKit', - '-weak_framework', - 'AppKit', - ], - frameworks = [ - '$SDKROOT/System/Library/Frameworks/Foundation.framework', - ], - visibility = ['PUBLIC'], -) diff --git a/Carthage/Checkouts/PINOperation/CHANGELOG.md b/Carthage/Checkouts/PINOperation/CHANGELOG.md index 221ad3cb..0e884e7a 100644 --- a/Carthage/Checkouts/PINOperation/CHANGELOG.md +++ b/Carthage/Checkouts/PINOperation/CHANGELOG.md @@ -1,3 +1,15 @@ +# Changelog + +## [1.2.1](https://github.com/Pinterest/PINOperation/tree/1.2.1) (2020-10-22) + +[Full Changelog](https://github.com/Pinterest/PINOperation/compare/1.2...1.2.1) + + +- Add release script [\#38](https://github.com/pinterest/PINOperation/pull/38) ([garrettmoon](https://github.com/garrettmoon)) +- Only use @import for SPM [\#36](https://github.com/pinterest/PINOperation/pull/36) ([garrettmoon](https://github.com/garrettmoon)) +- Add SPM Test [\#35](https://github.com/pinterest/PINOperation/pull/35) ([garrettmoon](https://github.com/garrettmoon)) +- Remove BUCK target [\#34](https://github.com/pinterest/PINOperation/pull/34) ([adlerj](https://github.com/adlerj)) + ## [1.2](https://github.com/Pinterest/PINOperation/tree/1.2) (2020-06-30) [Full Changelog](https://github.com/Pinterest/PINOperation/compare/1.1.2...1.2) diff --git a/Carthage/Checkouts/PINOperation/PINOperation.podspec b/Carthage/Checkouts/PINOperation/PINOperation.podspec index 7e598595..d99ffc60 100644 --- a/Carthage/Checkouts/PINOperation/PINOperation.podspec +++ b/Carthage/Checkouts/PINOperation/PINOperation.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'PINOperation' - s.version = '1.2' + s.version = '1.2.1' s.homepage = 'https://github.com/pinterest/PINOperation' s.summary = 'Fast, concurrency-limited task queue for iOS and OS X.' s.authors = { 'Garrett Moon' => 'garrett@pinterest.com' } diff --git a/Carthage/Checkouts/PINOperation/RELEASE.md b/Carthage/Checkouts/PINOperation/RELEASE.md index e0fc7ee8..807cee6a 100644 --- a/Carthage/Checkouts/PINOperation/RELEASE.md +++ b/Carthage/Checkouts/PINOperation/RELEASE.md @@ -1,13 +1,7 @@ # Release Process This document describes the process for a public PINOperation release. -### Preparation -- Install [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator): `sudo gem install github_changelog_generator` -- Generate a GitHub Personal Access Token to prevent running into public GitHub API rate limits: https://github.com/github-changelog-generator/github-changelog-generator#github-token - ### Process -- Run `github_changelog_generator` in PINOperation project directory: `github_changelog_generator --token --user Pinterest --project PINOperation`. To avoid hitting rate limit, the generator will replace the entire file with just the changes from this version – revert that giant deletion to get the entire new changelog. -- Update `spec.version` within `PINOperation.podspec` and the `since-tag` and `future-release` fields in `.github_changelog_generator`. -- Create a new PR with the updated `PINOperation.podspec` and the newly generated changelog, add `#changelog` to the PR message so the CI will not prevent merging it. -- After merging in the PR, [create a new GitHub release](https://github.com/Pinterest/PINOperation/releases/new). Use the generated changelog for the new release. -- Push to Cocoapods with `pod trunk push` +- Ensure the latest master build is green. +- Run the github action 'Create Release'. +- Check that the release was successfully published to [Github](https://github.com/pinterest/PINOperation/releases) and [Cocoapods](https://cocoapods.org/pods/PINOperation). diff --git a/Carthage/Checkouts/PINOperation/Scripts/release.sh b/Carthage/Checkouts/PINOperation/Scripts/release.sh new file mode 100755 index 00000000..d9291576 --- /dev/null +++ b/Carthage/Checkouts/PINOperation/Scripts/release.sh @@ -0,0 +1,94 @@ +#!/bin/bash +set -e + +PROJECT=PINOperation + +if ! git diff-index --quiet HEAD --; then + echo "Please commit or stash any changes before running." + exit 1 +fi + +if [ -z "$GITHUB_CHANGELOG_API_KEY" ]; then + echo "Must set \$GITHUB_CHANGELOG_API_KEY environment variable" + exit 1 +fi + +case $1 in + "--major") + UPDATE_TYPE="major" + ;; + + "--minor") + UPDATE_TYPE="minor" + ;; + + "--patch") + UPDATE_TYPE="patch" + ;; + + *) + echo "Usage release.sh --patch / --minor / --major" + exit 1 + ;; +esac + +PODSPEC="$PROJECT.podspec" +CURRENT_VERSION=`grep "version" -m 1 $PODSPEC | sed -E "s/^.*version[ \t]*=[ \t]*'([0-9\.]+)'/\1/"` +DOT_COUNT=`echo "$CURRENT_VERSION" | grep -o '\.' | wc -l` + +if [ "$DOT_COUNT" -eq "0" ]; then + major=$CURRENT_VERSION + minor="0" + patch="0" +elif [ "$DOT_COUNT" -eq "1" ]; then + major=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)/\1/"` + minor=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)/\2/"` + patch="0" +elif [ "$DOT_COUNT" -eq "2" ]; then + major=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)\.([0-9]+)/\1/"` + minor=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)\.([0-9]+)/\2/"` + patch=`echo "$CURRENT_VERSION" | sed -E "s/([0-9])+\.([0-9]+)\.([0-9]+)/\3/"` +fi + +echo "Current version: $major.$minor.$patch" + +if [ "$UPDATE_TYPE" == "major" ]; then + major=$((major + 1)) + minor=0 + patch=0 +elif [ "$UPDATE_TYPE" == "minor" ]; then + minor=$((minor + 1)) + patch=0 +elif [ "$UPDATE_TYPE" == "patch" ]; then + patch=$((patch + 1)) +fi + +NEW_VERSION="$major.$minor.$patch" +echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV +echo "New version: $NEW_VERSION" + +echo "Updating $PODSPEC" +sed -E "s/^(.*version[ \t]*=[ \t]*)'$CURRENT_VERSION'/\1'$NEW_VERSION'/" $PODSPEC > new.podspec +mv new.podspec $PODSPEC + +echo "Updating .github_changelog_generator" +cat << EOF > .github_changelog_generator +issues=false +since-tag=$CURRENT_VERSION +future-release=$NEW_VERSION +EOF + +github_changelog_generator --token $GITHUB_CHANGELOG_API_KEY --user Pinterest --project $PROJECT --output NEW_CHANGES.md + +# Delete # Changelog at the top of the old CHANGELOG +grep -v "# Changelog" CHANGELOG.md > CHANGELOG.tmp && mv CHANGELOG.tmp CHANGELOG.md + +# Delete the last line and first line then use a magic sed command the internet told me +# about to delete trailing newlines (except the last one) +# Then prepend to existing changelog +grep -v "\*" NEW_CHANGES.md | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' | cat - CHANGELOG.md > CHANGELOG.tmp +mv CHANGELOG.tmp CHANGELOG.md +rm NEW_CHANGES.md + +git add .github_changelog_generator CHANGELOG.md $PODSPEC +git commit --message "[AUTO] Update CHANGELOG.md and bump for $UPDATE_TYPE update." diff --git a/Carthage/Checkouts/PINOperation/Scripts/tag-release-branch.sh b/Carthage/Checkouts/PINOperation/Scripts/tag-release-branch.sh new file mode 100755 index 00000000..a66af230 --- /dev/null +++ b/Carthage/Checkouts/PINOperation/Scripts/tag-release-branch.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -ex + +echo "Tagging release branch" +TAG=$NEW_VERSION + +echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV +git tag $TAG +git push origin --tags + +echo "Setting Release Notes" +cat CHANGELOG.md | awk '/^#/{f=1} f; /^#/ && ++c==3{exit}' | sed '$ d' > RELEASE_NOTES.md diff --git a/Carthage/Checkouts/PINOperation/Tests/PINOperationGroupTests.m b/Carthage/Checkouts/PINOperation/Tests/PINOperationGroupTests.m index 7505d56f..3b9fc372 100644 --- a/Carthage/Checkouts/PINOperation/Tests/PINOperationGroupTests.m +++ b/Carthage/Checkouts/PINOperation/Tests/PINOperationGroupTests.m @@ -6,7 +6,11 @@ // Copyright © 2016 Pinterest. All rights reserved. // +#if SWIFT_PACKAGE @import PINOperation; +#else +#import +#endif #import #import diff --git a/Carthage/Checkouts/PINOperation/Tests/PINOperationQueueTests.m b/Carthage/Checkouts/PINOperation/Tests/PINOperationQueueTests.m index 844968f2..82626f79 100644 --- a/Carthage/Checkouts/PINOperation/Tests/PINOperationQueueTests.m +++ b/Carthage/Checkouts/PINOperation/Tests/PINOperationQueueTests.m @@ -6,7 +6,12 @@ // Copyright © 2016 Pinterest. All rights reserved. // +#if SWIFT_PACKAGE @import PINOperation; +#else +#import +#endif + #import #import diff --git a/Carthage/Checkouts/PINOperation/makefile b/Carthage/Checkouts/PINOperation/makefile index 6cce01cc..d4c6a4d1 100644 --- a/Carthage/Checkouts/PINOperation/makefile +++ b/Carthage/Checkouts/PINOperation/makefile @@ -1,13 +1,13 @@ -PLATFORM="platform=iOS Simulator,name=iPhone 7" +PLATFORM="platform=iOS Simulator,name=iPhone 8" SDK="iphonesimulator" SHELL=/bin/bash -o pipefail -.PHONY: all lint test analyze carthage +.PHONY: all cocoapods test analyze carthage spm carthage: carthage build --no-skip-current -lint: +cocoapods: pod lib lint analyze: @@ -24,4 +24,10 @@ test: ONLY_ACTIVE_ARCH=NO \ CODE_SIGNING_REQUIRED=NO | xcpretty -all: carthage lint test analyze \ No newline at end of file +spm: +# For now just check whether we can assemble it +# TODO: replace it with "swift test --enable-test-discovery --sanitize=thread" when swiftPM resource-related bug would be fixed. +# https://bugs.swift.org/browse/SR-13560 + swift build + +all: carthage cocoapods test analyze spm \ No newline at end of file