├── .gitattributes ├── .github └── workflows │ ├── ci.yaml │ └── publish_release.yml ├── .github_changelog_generator ├── .gitignore ├── .ruby-version ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── Cartfile ├── Cartfile.resolved ├── Carthage └── Checkouts │ ├── PINCache │ ├── .github │ │ └── workflows │ │ │ ├── ci.yaml │ │ │ └── publish_release.yml │ ├── .github_changelog_generator │ ├── .gitignore │ ├── .gitmodules │ ├── .ruby-version │ ├── CHANGELOG.md │ ├── CODE_OF_CONDUCT.md │ ├── Cartfile │ ├── Cartfile.resolved │ ├── Carthage │ │ └── Checkouts │ │ │ └── PINOperation │ │ │ ├── .github │ │ │ └── workflows │ │ │ │ ├── ci.yml │ │ │ │ └── publish_release.yml │ │ │ ├── .github_changelog_generator │ │ │ ├── .gitignore │ │ │ ├── .swiftpm │ │ │ └── xcode │ │ │ │ └── package.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ │ ├── BUCK │ │ │ ├── CHANGELOG.md │ │ │ ├── CI │ │ │ ├── build.sh │ │ │ └── exclude-from-build.json │ │ │ ├── CODE_OF_CONDUCT.md │ │ │ ├── Dangerfile │ │ │ ├── Example │ │ │ ├── PINOperationExample.xcodeproj │ │ │ │ ├── project.pbxproj │ │ │ │ └── project.xcworkspace │ │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ ├── PINOperationExample.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ ├── PINOperationExample │ │ │ │ ├── AppDelegate.swift │ │ │ │ ├── Assets.xcassets │ │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Base.lproj │ │ │ │ │ └── LaunchScreen.storyboard │ │ │ │ ├── Info.plist │ │ │ │ ├── MainViewController.h │ │ │ │ ├── MainViewController.m │ │ │ │ └── PINOperationExample-Bridging-Header.h │ │ │ ├── Podfile │ │ │ └── Podfile.lock │ │ │ ├── Gemfile │ │ │ ├── LICENSE.txt │ │ │ ├── PINOperation.podspec │ │ │ ├── PINOperation.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ ├── PINOperation-macOS.xcscheme │ │ │ │ ├── PINOperation-macOSTests.xcscheme │ │ │ │ ├── PINOperation-tvOS.xcscheme │ │ │ │ ├── PINOperation-tvOSTests.xcscheme │ │ │ │ ├── PINOperation-visionOS.xcscheme │ │ │ │ ├── PINOperation-visionOSTests.xcscheme │ │ │ │ ├── PINOperation-watchOS.xcscheme │ │ │ │ ├── PINOperation-watchOSTests.xcscheme │ │ │ │ ├── PINOperation.xcscheme │ │ │ │ └── PINOperationTests.xcscheme │ │ │ ├── Package.swift │ │ │ ├── README.md │ │ │ ├── RELEASE.md │ │ │ ├── Scripts │ │ │ ├── release.sh │ │ │ └── tag-release-branch.sh │ │ │ ├── Source │ │ │ ├── Info.plist │ │ │ ├── PINOperation.h │ │ │ ├── PINOperationGroup.h │ │ │ ├── PINOperationGroup.m │ │ │ ├── PINOperationMacros.h │ │ │ ├── PINOperationQueue.h │ │ │ ├── PINOperationQueue.m │ │ │ ├── PINOperationTypes.h │ │ │ ├── PrivacyInfo.xcprivacy │ │ │ └── include │ │ │ │ └── PINOperation │ │ │ │ ├── PINOperation.h │ │ │ │ ├── PINOperationGroup.h │ │ │ │ ├── PINOperationMacros.h │ │ │ │ ├── PINOperationQueue.h │ │ │ │ └── PINOperationTypes.h │ │ │ ├── Tests │ │ │ ├── Info.plist │ │ │ ├── PINOperationGroupTests.m │ │ │ └── PINOperationQueueTests.m │ │ │ ├── build_docs.sh │ │ │ ├── build_tests.sh │ │ │ ├── docs │ │ │ ├── com.pinterest.PINOperationQueue-1.0.docset │ │ │ │ └── Contents │ │ │ │ │ ├── Info.plist │ │ │ │ │ └── Resources │ │ │ │ │ ├── Documents │ │ │ │ │ ├── Blocks │ │ │ │ │ │ └── PINOperationBlock.html │ │ │ │ │ ├── Constants │ │ │ │ │ │ └── PINOperationQueuePriority.html │ │ │ │ │ ├── Protocols │ │ │ │ │ │ └── PINOperationReference.html │ │ │ │ │ ├── css │ │ │ │ │ │ └── scss │ │ │ │ │ │ │ ├── _index.scss │ │ │ │ │ │ │ ├── _layout.scss │ │ │ │ │ │ │ ├── _normalize.scss │ │ │ │ │ │ │ ├── _object.scss │ │ │ │ │ │ │ ├── _print.scss │ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ │ ├── _xcode.scss │ │ │ │ │ │ │ └── style.scss │ │ │ │ │ ├── hierarchy.html │ │ │ │ │ ├── img │ │ │ │ │ │ ├── button_bar_background.png │ │ │ │ │ │ ├── disclosure.png │ │ │ │ │ │ ├── disclosure_open.png │ │ │ │ │ │ ├── library_background.png │ │ │ │ │ │ └── title_background.png │ │ │ │ │ ├── index.html │ │ │ │ │ └── js │ │ │ │ │ │ └── script.js │ │ │ │ │ ├── Nodes.xml │ │ │ │ │ ├── Tokens1.xml │ │ │ │ │ ├── Tokens2.xml │ │ │ │ │ ├── Tokens3.xml │ │ │ │ │ ├── docSet.dsidx │ │ │ │ │ ├── docSet.dsidx-shm │ │ │ │ │ ├── docSet.dsidx-wal │ │ │ │ │ ├── docSet.mom │ │ │ │ │ ├── docSet.skidx │ │ │ │ │ ├── docSet.toc │ │ │ │ │ └── docSet.tokencache │ │ │ └── html │ │ │ │ ├── Blocks │ │ │ │ └── PINOperationBlock.html │ │ │ │ ├── Constants │ │ │ │ └── PINOperationQueuePriority.html │ │ │ │ ├── Protocols │ │ │ │ └── PINOperationReference.html │ │ │ │ ├── css │ │ │ │ └── scss │ │ │ │ │ ├── _index.scss │ │ │ │ │ ├── _layout.scss │ │ │ │ │ ├── _normalize.scss │ │ │ │ │ ├── _object.scss │ │ │ │ │ ├── _print.scss │ │ │ │ │ ├── _variables.scss │ │ │ │ │ ├── _xcode.scss │ │ │ │ │ └── style.scss │ │ │ │ ├── hierarchy.html │ │ │ │ ├── img │ │ │ │ ├── button_bar_background.png │ │ │ │ ├── disclosure.png │ │ │ │ ├── disclosure_open.png │ │ │ │ ├── library_background.png │ │ │ │ └── title_background.png │ │ │ │ ├── index.html │ │ │ │ └── js │ │ │ │ └── script.js │ │ │ ├── makefile │ │ │ └── run_tests_update_status.sh │ ├── IntegrationTests │ │ └── PINCache-SPM-Integration │ │ │ ├── PINCache-SPM-Integration.xcodeproj │ │ │ ├── project.pbxproj │ │ │ ├── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ └── PINCache-SPM-Integration.xcscheme │ │ │ └── PINCache-SPM-Integration │ │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ │ ├── ContentView.swift │ │ │ ├── Info.plist │ │ │ ├── PINCache_SPM_IntegrationApp.swift │ │ │ └── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ ├── LICENSE.txt │ ├── Makefile │ ├── PINCache.podspec │ ├── PINCache.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── PINCache-macOS.xcscheme │ │ │ ├── PINCache-tvOS.xcscheme │ │ │ ├── PINCache-visionOS.xcscheme │ │ │ ├── PINCache-watchOS.xcscheme │ │ │ └── PINCache.xcscheme │ ├── PINCache.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Package.swift │ ├── README.md │ ├── RELEASE.md │ ├── Scripts │ │ ├── release.sh │ │ └── tag-release-branch.sh │ ├── Source │ │ ├── Info.plist │ │ ├── PINCache.h │ │ ├── PINCache.m │ │ ├── PINCacheMacros.h │ │ ├── PINCacheObjectSubscripting.h │ │ ├── PINCaching.h │ │ ├── PINDiskCache.h │ │ ├── PINDiskCache.m │ │ ├── PINMemoryCache.h │ │ ├── PINMemoryCache.m │ │ ├── PrivacyInfo.xcprivacy │ │ └── include │ │ │ └── PINCache │ │ │ ├── PINCache.h │ │ │ ├── PINCacheMacros.h │ │ │ ├── PINCacheObjectSubscripting.h │ │ │ ├── PINCaching.h │ │ │ ├── PINDiskCache.h │ │ │ └── PINMemoryCache.h │ ├── Tests │ │ ├── Default-568h@2x.png │ │ ├── Info.plist │ │ ├── NSDate+PINCacheTests.h │ │ ├── NSDate+PINCacheTests.m │ │ ├── PINCacheTests.h │ │ ├── PINCacheTests.m │ │ ├── PINDiskCache+PINCacheTests.h │ │ └── PINDiskCache+PINCacheTests.m │ ├── build_docs.sh │ └── docs │ │ ├── com.pinterest.PINCache-2.0.docset │ │ └── Contents │ │ │ ├── Info.plist │ │ │ └── Resources │ │ │ ├── Documents │ │ │ ├── Blocks │ │ │ │ ├── PINCacheBlock.html │ │ │ │ ├── PINCacheObjectBlock.html │ │ │ │ ├── PINDiskCacheBlock.html │ │ │ │ ├── PINDiskCacheFileURLBlock.html │ │ │ │ ├── PINDiskCacheObjectBlock.html │ │ │ │ ├── PINMemoryCacheBlock.html │ │ │ │ └── PINMemoryCacheObjectBlock.html │ │ │ ├── Classes │ │ │ │ ├── PINCache.html │ │ │ │ ├── PINDiskCache.html │ │ │ │ └── PINMemoryCache.html │ │ │ ├── Protocols │ │ │ │ └── PINCacheObjectSubscripting.html │ │ │ ├── css │ │ │ │ └── scss │ │ │ │ │ ├── _index.scss │ │ │ │ │ ├── _layout.scss │ │ │ │ │ ├── _normalize.scss │ │ │ │ │ ├── _object.scss │ │ │ │ │ ├── _print.scss │ │ │ │ │ ├── _variables.scss │ │ │ │ │ ├── _xcode.scss │ │ │ │ │ └── style.scss │ │ │ ├── hierarchy.html │ │ │ ├── img │ │ │ │ ├── button_bar_background.png │ │ │ │ ├── disclosure.png │ │ │ │ ├── disclosure_open.png │ │ │ │ ├── library_background.png │ │ │ │ └── title_background.png │ │ │ ├── index.html │ │ │ └── js │ │ │ │ └── script.js │ │ │ ├── Nodes.xml │ │ │ ├── Tokens1.xml │ │ │ ├── Tokens10.xml │ │ │ ├── Tokens11.xml │ │ │ ├── Tokens2.xml │ │ │ ├── Tokens3.xml │ │ │ ├── Tokens4.xml │ │ │ ├── Tokens5.xml │ │ │ ├── Tokens6.xml │ │ │ ├── Tokens7.xml │ │ │ ├── Tokens8.xml │ │ │ ├── Tokens9.xml │ │ │ ├── docSet.dsidx │ │ │ ├── docSet.dsidx-shm │ │ │ ├── docSet.dsidx-wal │ │ │ ├── docSet.mom │ │ │ ├── docSet.skidx │ │ │ ├── docSet.toc │ │ │ └── docSet.tokencache │ │ └── html │ │ ├── Blocks │ │ ├── PINCacheBlock.html │ │ ├── PINCacheObjectBlock.html │ │ ├── PINDiskCacheBlock.html │ │ ├── PINDiskCacheFileURLBlock.html │ │ ├── PINDiskCacheObjectBlock.html │ │ ├── PINMemoryCacheBlock.html │ │ └── PINMemoryCacheObjectBlock.html │ │ ├── Classes │ │ ├── PINCache.html │ │ ├── PINDiskCache.html │ │ └── PINMemoryCache.html │ │ ├── Protocols │ │ └── PINCacheObjectSubscripting.html │ │ ├── css │ │ └── scss │ │ │ ├── _index.scss │ │ │ ├── _layout.scss │ │ │ ├── _normalize.scss │ │ │ ├── _object.scss │ │ │ ├── _print.scss │ │ │ ├── _variables.scss │ │ │ ├── _xcode.scss │ │ │ └── style.scss │ │ ├── hierarchy.html │ │ ├── img │ │ ├── button_bar_background.png │ │ ├── disclosure.png │ │ ├── disclosure_open.png │ │ ├── library_background.png │ │ └── title_background.png │ │ ├── index.html │ │ └── js │ │ └── script.js │ └── PINOperation │ ├── .github │ └── workflows │ │ ├── ci.yml │ │ ├── publish_release.yml │ │ └── push_release_branch.yml │ ├── .github_changelog_generator │ ├── .gitignore │ ├── .swiftpm │ └── xcode │ │ └── package.xcworkspace │ │ └── contents.xcworkspacedata │ ├── BUCK │ ├── CHANGELOG.md │ ├── CI │ ├── build.sh │ └── exclude-from-build.json │ ├── CODE_OF_CONDUCT.md │ ├── Example │ ├── PINOperationExample.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── PINOperationExample.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── PINOperationExample │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ ├── Info.plist │ │ ├── MainViewController.h │ │ ├── MainViewController.m │ │ └── PINOperationExample-Bridging-Header.h │ ├── Podfile │ └── Podfile.lock │ ├── LICENSE.txt │ ├── PINOperation.podspec │ ├── PINOperation.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── PINOperation-macOS.xcscheme │ │ ├── PINOperation-macOSTests.xcscheme │ │ ├── PINOperation-tvOS.xcscheme │ │ ├── PINOperation-tvOSTests.xcscheme │ │ ├── PINOperation-visionOS.xcscheme │ │ ├── PINOperation-visionOSTests.xcscheme │ │ ├── PINOperation-watchOS.xcscheme │ │ ├── PINOperation-watchOSTests.xcscheme │ │ ├── PINOperation.xcscheme │ │ └── PINOperationTests.xcscheme │ ├── Package.swift │ ├── README.md │ ├── RELEASE.md │ ├── Scripts │ ├── release.sh │ └── tag-release-branch.sh │ ├── Source │ ├── Info.plist │ ├── PINOperation.h │ ├── PINOperationGroup.h │ ├── PINOperationGroup.m │ ├── PINOperationMacros.h │ ├── PINOperationQueue.h │ ├── PINOperationQueue.m │ ├── PINOperationTypes.h │ ├── PrivacyInfo.xcprivacy │ └── include │ │ └── PINOperation │ │ ├── PINOperation.h │ │ ├── PINOperationGroup.h │ │ ├── PINOperationMacros.h │ │ ├── PINOperationQueue.h │ │ └── PINOperationTypes.h │ ├── Tests │ ├── Info.plist │ ├── PINOperationGroupTests.m │ └── PINOperationQueueTests.m │ ├── build_docs.sh │ ├── build_tests.sh │ ├── docs │ ├── com.pinterest.PINOperationQueue-1.0.docset │ │ └── Contents │ │ │ ├── Info.plist │ │ │ └── Resources │ │ │ ├── Documents │ │ │ ├── Blocks │ │ │ │ └── PINOperationBlock.html │ │ │ ├── Constants │ │ │ │ └── PINOperationQueuePriority.html │ │ │ ├── Protocols │ │ │ │ └── PINOperationReference.html │ │ │ ├── css │ │ │ │ └── scss │ │ │ │ │ ├── _index.scss │ │ │ │ │ ├── _layout.scss │ │ │ │ │ ├── _normalize.scss │ │ │ │ │ ├── _object.scss │ │ │ │ │ ├── _print.scss │ │ │ │ │ ├── _variables.scss │ │ │ │ │ ├── _xcode.scss │ │ │ │ │ └── style.scss │ │ │ ├── hierarchy.html │ │ │ ├── img │ │ │ │ ├── button_bar_background.png │ │ │ │ ├── disclosure.png │ │ │ │ ├── disclosure_open.png │ │ │ │ ├── library_background.png │ │ │ │ └── title_background.png │ │ │ ├── index.html │ │ │ └── js │ │ │ │ └── script.js │ │ │ ├── Nodes.xml │ │ │ ├── Tokens1.xml │ │ │ ├── Tokens2.xml │ │ │ ├── Tokens3.xml │ │ │ ├── docSet.dsidx │ │ │ ├── docSet.dsidx-shm │ │ │ ├── docSet.dsidx-wal │ │ │ ├── docSet.mom │ │ │ ├── docSet.skidx │ │ │ ├── docSet.toc │ │ │ └── docSet.tokencache │ └── html │ │ ├── Blocks │ │ └── PINOperationBlock.html │ │ ├── Constants │ │ └── PINOperationQueuePriority.html │ │ ├── Protocols │ │ └── PINOperationReference.html │ │ ├── css │ │ └── scss │ │ │ ├── _index.scss │ │ │ ├── _layout.scss │ │ │ ├── _normalize.scss │ │ │ ├── _object.scss │ │ │ ├── _print.scss │ │ │ ├── _variables.scss │ │ │ ├── _xcode.scss │ │ │ └── style.scss │ │ ├── hierarchy.html │ │ ├── img │ │ ├── button_bar_background.png │ │ ├── disclosure.png │ │ ├── disclosure_open.png │ │ ├── library_background.png │ │ └── title_background.png │ │ ├── index.html │ │ └── js │ │ └── script.js │ ├── makefile │ └── run_tests_update_status.sh ├── Examples ├── Example-Mac │ ├── Example-Mac.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Example-Mac.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── PINRemoteImage │ │ ├── APNGViewController.h │ │ ├── APNGViewController.m │ │ ├── APNGViewController.xib │ │ ├── AnimatedWebPViewController.h │ │ ├── AnimatedWebPViewController.m │ │ ├── AnimatedWebPViewController.xib │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── white-pinterest-logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── white-pinterest-logo@1x.png │ │ │ │ └── white-pinterest-logo@2x.png │ │ ├── Base.lproj │ │ │ ├── MainMenu.xib │ │ │ └── PINImageCollectionViewItemView.xib │ │ ├── DegradedViewController.h │ │ ├── DegradedViewController.m │ │ ├── DegradedViewController.xib │ │ ├── GIFViewController.h │ │ ├── GIFViewController.m │ │ ├── GIFViewController.xib │ │ ├── Info.plist │ │ ├── PINViewWithBackgroundColor.h │ │ ├── PINViewWithBackgroundColor.m │ │ ├── ProcessingViewController.h │ │ ├── ProcessingViewController.m │ │ ├── ProcessingViewController.xib │ │ ├── ProgressiveViewController.h │ │ ├── ProgressiveViewController.m │ │ ├── ProgressiveViewController.xib │ │ ├── ScrollViewController.h │ │ ├── ScrollViewController.m │ │ ├── ScrollViewController.xib │ │ ├── WebPViewController.h │ │ ├── WebPViewController.m │ │ ├── WebPViewController.xib │ │ └── main.m │ ├── Podfile │ └── Podfile.lock ├── Example-Shared │ ├── Kitten.h │ └── Kitten.m ├── Example-Xcode-SPM │ ├── Example-Xcode-SPM.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Example-Xcode-SPM │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── Example-tvOS │ ├── Example-tvOS.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Example-tvOS.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── PINRemoteImage.tvOSExample │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ │ ├── App Icon - Large.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon - Small.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ └── Top Shelf Image.imageset │ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.launchimage │ │ │ │ └── Contents.json │ │ │ └── white-pinterest-logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── white-pinterest-logo@1x.png │ │ ├── Base.lproj │ │ │ └── Main.storyboard │ │ ├── CollectionViewCell.swift │ │ ├── CollectionViewController.swift │ │ ├── DegradedViewController.swift │ │ ├── GIFViewController.swift │ │ ├── Info.plist │ │ ├── ProcessingViewController.swift │ │ ├── ProgressiveViewController.swift │ │ └── WebPViewController.swift │ ├── Podfile │ └── Podfile.lock ├── Example │ ├── Example.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Example.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── PINRemoteImage │ │ ├── APNGViewController.h │ │ ├── APNGViewController.m │ │ ├── AnimatedWebPViewController.h │ │ ├── AnimatedWebPViewController.m │ │ ├── Base.lproj │ │ │ └── Main.storyboard │ │ ├── DegradedViewController.h │ │ ├── DegradedViewController.m │ │ ├── GIFViewController.h │ │ ├── GIFViewController.m │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── LaunchImage.launchimage │ │ │ │ └── Contents.json │ │ ├── Media.xcassets │ │ │ └── white-pinterest-logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── white-pinterest-logo@1x.png │ │ │ │ └── white-pinterest-logo@2x.png │ │ ├── PINAppDelegate.h │ │ ├── PINAppDelegate.m │ │ ├── PINRemoteImage-Info.plist │ │ ├── PINViewController.h │ │ ├── PINViewController.m │ │ ├── ProcessingViewController.h │ │ ├── ProcessingViewController.m │ │ ├── ProgressiveViewController.h │ │ ├── ProgressiveViewController.m │ │ ├── WebPViewController.h │ │ ├── WebPViewController.m │ │ ├── en.lproj │ │ │ └── InfoPlist.strings │ │ └── main.m │ ├── Podfile │ └── Podfile.lock └── Swift-Example │ ├── Podfile │ ├── Podfile.lock │ ├── Swift-Example.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── Swift-Example.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── Swift-Example │ ├── APNGViewController.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── DegradedViewController.swift │ ├── GIFViewController.swift │ ├── Info.plist │ ├── Media.xcassets │ └── white-pinterest-logo.imageset │ │ ├── Contents.json │ │ ├── white-pinterest-logo@1x.png │ │ └── white-pinterest-logo@2x.png │ ├── ProcessingViewController.swift │ ├── ProgressiveViewController.swift │ ├── ScrollViewController.swift │ └── WebPViewController.swift ├── LICENSE ├── Makefile ├── PINRemoteImage.podspec ├── PINRemoteImage.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── xcshareddata │ └── xcschemes │ ├── PINRemoteImage-tvOS.xcscheme │ └── PINRemoteImage.xcscheme ├── PINRemoteImage.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── PINRemoteImage └── PINRemoteImageTests │ ├── Info.plist │ └── PINRemoteImageTests.m ├── Package.swift ├── README.md ├── RELEASE.md ├── Scripts ├── release.sh └── tag-release-branch.sh ├── Source ├── Classes │ ├── .gitkeep │ ├── AnimatedImages │ │ ├── PINAPNGAnimatedImage.m │ │ ├── PINAnimatedImage.m │ │ ├── PINAnimatedImageView.m │ │ ├── PINCachedAnimatedImage.m │ │ ├── PINGIFAnimatedImage.m │ │ └── PINWebPAnimatedImage.m │ ├── Categories │ │ ├── NSData+ImageDetectors.m │ │ ├── NSHTTPURLResponse+MaxAge.m │ │ ├── PINImage+DecodedImage.m │ │ └── PINImage+ScaledImage.m │ ├── ImageCategories │ │ ├── PINAnimatedImageView+PINRemoteImage.m │ │ ├── PINButton+PINRemoteImage.m │ │ └── PINImageView+PINRemoteImage.m │ ├── PINAlternateRepresentationProvider.m │ ├── PINCache │ │ └── PINCache+PINRemoteImageCaching.m │ ├── PINDisplayLink.h │ ├── PINDisplayLink.m │ ├── PINProgressiveImage.m │ ├── PINRemoteImageBasicCache.h │ ├── PINRemoteImageBasicCache.m │ ├── PINRemoteImageCallbacks.h │ ├── PINRemoteImageCallbacks.m │ ├── PINRemoteImageCategoryManager.m │ ├── PINRemoteImageDownloadQueue.h │ ├── PINRemoteImageDownloadQueue.m │ ├── PINRemoteImageDownloadTask.h │ ├── PINRemoteImageDownloadTask.m │ ├── PINRemoteImageManager+Private.h │ ├── PINRemoteImageManager.m │ ├── PINRemoteImageManagerConfiguration.h │ ├── PINRemoteImageManagerConfiguration.m │ ├── PINRemoteImageManagerResult.m │ ├── PINRemoteImageMemoryContainer.h │ ├── PINRemoteImageMemoryContainer.m │ ├── PINRemoteImageProcessorTask.h │ ├── PINRemoteImageProcessorTask.m │ ├── PINRemoteImageTask+Subclassing.h │ ├── PINRemoteImageTask.h │ ├── PINRemoteImageTask.m │ ├── PINRemoteLock.h │ ├── PINRemoteLock.m │ ├── PINRemoteWeakProxy.h │ ├── PINRemoteWeakProxy.m │ ├── PINRequestRetryStrategy.m │ ├── PINResume.h │ ├── PINResume.m │ ├── PINSpeedRecorder.h │ ├── PINSpeedRecorder.m │ ├── PINURLSessionManager.m │ └── include │ │ └── PINRemoteImage │ │ ├── NSData+ImageDetectors.h │ │ ├── NSHTTPURLResponse+MaxAge.h │ │ ├── PINAPNGAnimatedImage.h │ │ ├── PINAlternateRepresentationProvider.h │ │ ├── PINAnimatedImage.h │ │ ├── PINAnimatedImageView+PINRemoteImage.h │ │ ├── PINAnimatedImageView.h │ │ ├── PINButton+PINRemoteImage.h │ │ ├── PINCache+PINRemoteImageCaching.h │ │ ├── PINCachedAnimatedImage.h │ │ ├── PINGIFAnimatedImage.h │ │ ├── PINImage+DecodedImage.h │ │ ├── PINImage+ScaledImage.h │ │ ├── PINImageView+PINRemoteImage.h │ │ ├── PINProgressiveImage.h │ │ ├── PINRemoteImage.h │ │ ├── PINRemoteImageCaching.h │ │ ├── PINRemoteImageCategoryManager.h │ │ ├── PINRemoteImageDataConvertible.h │ │ ├── PINRemoteImageMacros.h │ │ ├── PINRemoteImageManager.h │ │ ├── PINRemoteImageManagerResult.h │ │ ├── PINRequestRetryStrategy.h │ │ ├── PINURLSessionManager.h │ │ └── PINWebPAnimatedImage.h ├── Info.plist ├── PINRemoteImage.modulemap └── PrivacyInfo.xcprivacy ├── Tests ├── Info.plist ├── Media.xcassets │ ├── Contents.json │ └── DynamicImage.imageset │ │ ├── Contents.json │ │ ├── Dark.png │ │ └── Light.png ├── NSDate+PINCacheTests.h ├── NSDate+PINCacheTests.m ├── PINAnimatedImage+PINAnimatedImageTesting.h ├── PINAnimatedImage+PINAnimatedImageTesting.m ├── PINAnimatedImageTests.swift ├── PINRemoteImageTests-Bridging-Header.h ├── PINRemoteImageTests.m ├── TestAnimatedImage.h ├── TestAnimatedImage.m └── fireworks.gif ├── build_docs.sh ├── docs ├── com.pinterest.PINRemoteImage-1.0.docset │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── Documents │ │ ├── Blocks │ │ │ ├── PINAnimatedImageDecodedPath.html │ │ │ ├── PINAnimatedImageInfoReady.html │ │ │ ├── PINAnimatedImageSharedReady.html │ │ │ └── PINRemoteImageManagerImageCompletion.html │ │ ├── Classes │ │ │ ├── PINAnimatedImage.html │ │ │ ├── PINProgressiveImage.html │ │ │ ├── PINRemoteImageCategoryManager.html │ │ │ └── PINRemoteImageManager.html │ │ ├── Constants │ │ │ ├── PINAnimatedImageError.html │ │ │ ├── PINAnimatedImageStatus.html │ │ │ ├── PINRemoteImageManagerDownloadOptions.html │ │ │ ├── PINRemoteImageManagerError.html │ │ │ ├── PINRemoteImageManagerPriority.html │ │ │ ├── PINRemoteImageResultType.html │ │ │ └── PINRemoteLockType.html │ │ ├── Protocols │ │ │ ├── PINRemoteImageCategory.html │ │ │ └── PINRemoteImageManagerAlternateRepresentationProvider.html │ │ ├── css │ │ │ ├── scss │ │ │ │ ├── _index.scss │ │ │ │ ├── _layout.scss │ │ │ │ ├── _normalize.scss │ │ │ │ ├── _object.scss │ │ │ │ ├── _print.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── _xcode.scss │ │ │ │ └── style.scss │ │ │ └── style.css │ │ ├── hierarchy.html │ │ ├── img │ │ │ ├── button_bar_background.png │ │ │ ├── disclosure.png │ │ │ ├── disclosure_open.png │ │ │ ├── library_background.png │ │ │ └── title_background.png │ │ ├── index.html │ │ └── js │ │ │ └── script.js │ │ ├── Nodes.xml │ │ ├── Tokens1.xml │ │ ├── Tokens10.xml │ │ ├── Tokens11.xml │ │ ├── Tokens12.xml │ │ ├── Tokens13.xml │ │ ├── Tokens14.xml │ │ ├── Tokens15.xml │ │ ├── Tokens16.xml │ │ ├── Tokens17.xml │ │ ├── Tokens2.xml │ │ ├── Tokens3.xml │ │ ├── Tokens4.xml │ │ ├── Tokens5.xml │ │ ├── Tokens6.xml │ │ ├── Tokens7.xml │ │ ├── Tokens8.xml │ │ ├── Tokens9.xml │ │ ├── docSet.dsidx │ │ ├── docSet.dsidx-shm │ │ ├── docSet.dsidx-wal │ │ ├── docSet.mom │ │ ├── docSet.skidx │ │ ├── docSet.toc │ │ └── docSet.tokencache └── html │ ├── Blocks │ ├── PINAnimatedImageDecodedPath.html │ ├── PINAnimatedImageInfoReady.html │ ├── PINAnimatedImageSharedReady.html │ └── PINRemoteImageManagerImageCompletion.html │ ├── Classes │ ├── PINAnimatedImage.html │ ├── PINProgressiveImage.html │ ├── PINRemoteImageCategoryManager.html │ └── PINRemoteImageManager.html │ ├── Constants │ ├── PINAnimatedImageError.html │ ├── PINAnimatedImageStatus.html │ ├── PINRemoteImageManagerDownloadOptions.html │ ├── PINRemoteImageManagerError.html │ ├── PINRemoteImageManagerPriority.html │ ├── PINRemoteImageResultType.html │ └── PINRemoteLockType.html │ ├── Protocols │ ├── PINRemoteImageCategory.html │ └── PINRemoteImageManagerAlternateRepresentationProvider.html │ ├── css │ ├── scss │ │ ├── _index.scss │ │ ├── _layout.scss │ │ ├── _normalize.scss │ │ ├── _object.scss │ │ ├── _print.scss │ │ ├── _variables.scss │ │ ├── _xcode.scss │ │ └── style.scss │ └── style.css │ ├── hierarchy.html │ ├── img │ ├── button_bar_background.png │ ├── disclosure.png │ ├── disclosure_open.png │ ├── library_background.png │ └── title_background.png │ ├── index.html │ └── js │ └── script.js └── progressive.gif /.gitattributes: -------------------------------------------------------------------------------- 1 | docs/* linguist-documentation 2 | Example/Pods/* linguist-vendored 3 | Example-Mac/Pods/* linguist-vendored -------------------------------------------------------------------------------- /.github_changelog_generator: -------------------------------------------------------------------------------- 1 | issues=false 2 | since-tag=3.0.3 3 | future-release=3.0.4 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Bundler 5 | .bundle 6 | 7 | # Created by https://www.gitignore.io/api/swift 8 | 9 | ### Swift ### 10 | # Xcode 11 | # 12 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 13 | 14 | ## Build generated 15 | build/ 16 | DerivedData 17 | 18 | ## Various settings 19 | *.pbxuser 20 | !default.pbxuser 21 | *.mode1v3 22 | !default.mode1v3 23 | *.mode2v3 24 | !default.mode2v3 25 | *.perspectivev3 26 | !default.perspectivev3 27 | xcuserdata 28 | 29 | ## Other 30 | *.xccheckout 31 | *.moved-aside 32 | *.xcuserstate 33 | *.xcscmblueprint 34 | 35 | ## Obj-C/Swift specific 36 | *.hmap 37 | *.ipa 38 | 39 | # CocoaPods 40 | # 41 | # We recommend against adding the Pods directory to your .gitignore. However 42 | # you should judge for yourself, the pros and cons are mentioned at: 43 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 44 | # 45 | Pods/ 46 | 47 | Carthage/Build 48 | 49 | ## SPM 50 | .swiftpm/ 51 | .build/ 52 | Package.resolved 53 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.3.0 2 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "pinterest/PINCache" ~> 3.0.4 2 | github "pinterest/PINOperation" -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "pinterest/PINCache" "3.0.4" 2 | github "pinterest/PINOperation" "1.2.3" 3 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/.github_changelog_generator: -------------------------------------------------------------------------------- 1 | issues=false 2 | since-tag=3.0.4 3 | future-release=3.0.5 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/.gitignore: -------------------------------------------------------------------------------- 1 | #Ignore the Mac OS X .DS_Store files 2 | .DS_Store 3 | 4 | #Ignore user-specific settings 5 | *.mode1v3 6 | *.mode2v3 7 | *.pbxuser 8 | *.perspectivev3 9 | xcuserdata 10 | 11 | #Ignore textmate build errors 12 | *.tm_build_errors 13 | 14 | #Ignore temp nibs and swap files 15 | *.swp 16 | *~.nib 17 | 18 | .gitattributes 19 | 20 | # Buck 21 | /buck-out 22 | /.buckconfig.local 23 | /.buckd 24 | 25 | Carthage/Build 26 | 27 | # SPM 28 | .swiftpm/ 29 | .build/ 30 | Package.resolved 31 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/.gitmodules -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/.ruby-version: -------------------------------------------------------------------------------- 1 | 3.3.0 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Cartfile: -------------------------------------------------------------------------------- 1 | github "pinterest/PINOperation" ~> 1.2.3 -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "pinterest/PINOperation" "1.2.3" 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/.github_changelog_generator: -------------------------------------------------------------------------------- 1 | issues=false 2 | since-tag=1.2.1 3 | future-release=1.2.2 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Xcode 4 | # 5 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 6 | 7 | ## Build generated 8 | build/ 9 | DerivedData/ 10 | 11 | ## Various settings 12 | *.pbxuser 13 | !default.pbxuser 14 | *.mode1v3 15 | !default.mode1v3 16 | *.mode2v3 17 | !default.mode2v3 18 | *.perspectivev3 19 | !default.perspectivev3 20 | xcuserdata/ 21 | 22 | ## Other 23 | *.moved-aside 24 | *.xcuserstate 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | *.dSYM.zip 30 | *.dSYM 31 | 32 | ## Docs 33 | docs/docsets/ 34 | 35 | ## Playgrounds 36 | timeline.xctimeline 37 | playground.xcworkspace 38 | 39 | # Swift Package Manager 40 | # 41 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 42 | # Packages/ 43 | .build/ 44 | 45 | # Carthage 46 | # 47 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 48 | # Carthage/Checkouts 49 | 50 | Carthage/Build 51 | 52 | # Bundler 53 | .bundle 54 | vendor 55 | 56 | # Example project 57 | Example/Pods 58 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/BUCK: -------------------------------------------------------------------------------- 1 | apple_library( 2 | name = 'PINOperation', 3 | modular = True, 4 | exported_headers = glob(['Source/*.h']), 5 | srcs = 6 | glob(['Source/*.m']), 7 | preprocessor_flags = ['-fobjc-arc'], 8 | lang_preprocessor_flags = { 9 | 'C': ['-std=gnu99'], 10 | 'CXX': ['-std=gnu++11', '-stdlib=libc++'], 11 | }, 12 | linker_flags = [ 13 | '-weak_framework', 14 | 'UIKit', 15 | '-weak_framework', 16 | 'AppKit', 17 | ], 18 | frameworks = [ 19 | '$SDKROOT/System/Library/Frameworks/Foundation.framework', 20 | ], 21 | visibility = ['PUBLIC'], 22 | ) 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/CI/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | make all -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/CI/exclude-from-build.json: -------------------------------------------------------------------------------- 1 | [ 2 | "^plans/", 3 | "^docs/", 4 | "^CI/exclude-from-build.json$", 5 | "^README.md$", 6 | "^CHANGELOG.md$" 7 | ] -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Dangerfile: -------------------------------------------------------------------------------- 1 | source_pattern = /(\.m|\.mm|\.h)$/ 2 | 3 | # Sometimes it's a README fix, or something like that - which isn't relevant for 4 | # including in a project's CHANGELOG for example 5 | declared_trivial = github.pr_title.include? "#trivial" 6 | has_changes_in_source_directory = !git.modified_files.grep(/Source/).empty? 7 | 8 | modified_source_files = git.modified_files.grep(source_pattern) 9 | has_modified_source_files = !modified_source_files.empty? 10 | added_source_files = git.added_files.grep(source_pattern) 11 | has_added_source_files = !added_source_files.empty? 12 | 13 | # Make it more obvious that a PR is a work in progress and shouldn't be merged yet 14 | warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]" 15 | 16 | # Warn when there is a big PR 17 | warn("This is a big PR, please consider splitting it up to ease code review.") if git.lines_of_code > 500 18 | 19 | # Changelog entries are required for changes to source files. 20 | no_changelog_entry = !git.modified_files.include?("CHANGELOG.md") 21 | if has_changes_in_source_directory && no_changelog_entry && !declared_trivial 22 | warn("Any source code changes should have an entry in CHANGELOG.md or have #trivial in their title.") 23 | end 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/PINOperationExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // PINOperationExample 4 | // 5 | // Created by Martin Púčik on 02/05/2020. 6 | // Copyright © 2020 Pinterest. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | final class AppDelegate: UIResponder, UIApplicationDelegate { 13 | private let queue: PINOperationQueue = PINOperationQueue(maxConcurrentOperations: 5) 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | let operationCount = 100 17 | let group = DispatchGroup() 18 | for _ in 0.. 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MainViewController : UIViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/PINOperationExample/PINOperationExample-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://cdn.cocoapods.org/' 2 | platform :ios, '12.0' 3 | 4 | target 'PINOperationExample' do 5 | pod 'PINOperation', :path => '../' 6 | end 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PINOperation (1.2.3) 3 | 4 | DEPENDENCIES: 5 | - PINOperation (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | PINOperation: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | PINOperation: fb563bcc9c32c26d6c78aaff967d405aa2ee74a7 13 | 14 | PODFILE CHECKSUM: 590bbecb30df161f3cdb5ab267c95244b0df928f 15 | 16 | COCOAPODS: 1.15.2 17 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'danger' 4 | gem 'danger-slack' -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/PINOperation.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'PINOperation' 3 | s.version = '1.2.3' 4 | s.homepage = 'https://github.com/pinterest/PINOperation' 5 | s.summary = 'Fast, concurrency-limited task queue for iOS and OS X.' 6 | s.authors = { 'Garrett Moon' => 'garrett@pinterest.com' } 7 | s.source = { :git => 'https://github.com/pinterest/PINOperation.git', :tag => "#{s.version}" } 8 | s.license = { :type => 'Apache 2.0', :file => 'LICENSE.txt' } 9 | s.requires_arc = true 10 | s.frameworks = 'Foundation' 11 | s.cocoapods_version = '>= 1.13.0' 12 | s.ios.deployment_target = '12.0' 13 | s.osx.deployment_target = '10.13' 14 | s.tvos.deployment_target = '12.0' 15 | s.visionos.deployment_target = '1.0' 16 | s.watchos.deployment_target = '4.0' 17 | pch_PIN = <<-EOS 18 | #ifndef TARGET_OS_WATCH 19 | #define TARGET_OS_WATCH 0 20 | #endif 21 | EOS 22 | s.prefix_header_contents = pch_PIN 23 | s.source_files = 'Source/*.{h,m}' 24 | s.resource_bundles = { 'PINOperation' => ['Source/PrivacyInfo.xcprivacy'] } 25 | end 26 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/PINOperation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/PINOperation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/RELEASE.md: -------------------------------------------------------------------------------- 1 | # Release Process 2 | This document describes the process for a public PINOperation release. 3 | 4 | ### Process 5 | - Ensure the latest master build is green. 6 | - Run the github action 'Create Release'. 7 | - Check that the release was successfully published to [Github](https://github.com/pinterest/PINOperation/releases) and [Cocoapods](https://cocoapods.org/pods/PINOperation). 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Scripts/tag-release-branch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | echo "Tagging release branch" 5 | TAG=$NEW_VERSION 6 | 7 | echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV 8 | git tag $TAG 9 | git push origin --tags 10 | 11 | echo "Setting Release Notes" 12 | cat CHANGELOG.md | awk '/^#/{f=1} f; /^#/ && ++c==3{exit}' | sed '$ d' > RELEASE_NOTES.md 13 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2017 Pinterest. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/PINOperation.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperation.h 3 | // PINOperation 4 | // 5 | // Created by Adlai Holler on 1/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | #import 13 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/PINOperationGroup.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperationGroup.h 3 | // PINOperation 4 | // 5 | // Created by Garrett Moon on 10/8/16. 6 | // Copyright © 2016 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @class PINOperationQueue; 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @protocol PINGroupOperationReference; 18 | 19 | PINOP_SUBCLASSING_RESTRICTED 20 | @interface PINOperationGroup : NSObject 21 | 22 | - (instancetype)init NS_UNAVAILABLE; 23 | + (instancetype)asyncOperationGroupWithQueue:(PINOperationQueue *)operationQueue; 24 | 25 | - (nullable id )addOperation:(dispatch_block_t)operation; 26 | - (nullable id )addOperation:(dispatch_block_t)operation withPriority:(PINOperationQueuePriority)priority; 27 | - (void)start; 28 | - (void)cancel; 29 | - (void)setCompletion:(dispatch_block_t)completion; 30 | - (void)waitUntilComplete; 31 | 32 | @end 33 | 34 | @protocol PINGroupOperationReference 35 | 36 | @end 37 | 38 | NS_ASSUME_NONNULL_END 39 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/PINOperationMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperationMacros.h 3 | // PINOperation 4 | // 5 | // Created by Adlai Holler on 1/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #ifndef PINOP_SUBCLASSING_RESTRICTED 10 | #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 11 | #define PINOP_SUBCLASSING_RESTRICTED __attribute__((objc_subclassing_restricted)) 12 | #else 13 | #define PINOP_SUBCLASSING_RESTRICTED 14 | #endif // #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 15 | #endif // #ifndef PINOP_SUBCLASSING_RESTRICTED 16 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/PINOperationTypes.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperationTypes.h 3 | // PINOperation 4 | // 5 | // Created by Adlai Holler on 1/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSUInteger, PINOperationQueuePriority) { 12 | PINOperationQueuePriorityLow, 13 | PINOperationQueuePriorityDefault, 14 | PINOperationQueuePriorityHigh, 15 | }; 16 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyTrackingDomains 8 | 9 | NSPrivacyCollectedDataTypes 10 | 11 | NSPrivacyAccessedAPITypes 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperation.h: -------------------------------------------------------------------------------- 1 | ../../PINOperation.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationGroup.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationGroup.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationMacros.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationMacros.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationQueue.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationQueue.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationTypes.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationTypes.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/build_docs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | appledoc \ 4 | --company-id com.pinterest \ 5 | --project-name PINOperation \ 6 | --project-company Pinterest \ 7 | --project-version 1.0 \ 8 | --docset-min-xcode-version 4.3 \ 9 | --docset-bundle-id %COMPANYID.%PROJECTID \ 10 | --docset-bundle-name "%PROJECT %VERSION" \ 11 | --docset-bundle-filename %COMPANYID.%PROJECTID-%VERSIONID.docset \ 12 | --ignore "tests" \ 13 | --ignore "docs" \ 14 | --ignore "*.m" \ 15 | --no-repeat-first-par \ 16 | --explicit-crossref \ 17 | --clean-output \ 18 | --keep-intermediate-files \ 19 | --output ./docs \ 20 | . 21 | 22 | mv docs/docset docs/com.pinterest.PINOperation-1.0.docset 23 | rm docs/docset-installed.txt 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/build_tests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Have to specify destination because http://www.openradar.me/23857648 4 | xcodebuild ONLY_ACTIVE_ARCH=NO -project tests/PINOperation.xcodeproj -scheme PINOperationTests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' clean build test 5 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | com.pinterest.PINOperationQueue 9 | CFBundleName 10 | PINOperationQueue 1.0 11 | CFBundleShortVersionString 12 | 1.0 13 | CFBundleVersion 14 | 1.0 15 | 16 | 17 | 18 | 19 | DocSetFeedName 20 | PINOperationQueue Documentation 21 | 22 | DocSetMinimumXcodeVersion 23 | 4.3 24 | 25 | DashDocSetFamily 26 | appledoc 27 | DocSetPublisherIdentifier 28 | com.pinterest.documentation 29 | DocSetPublisherName 30 | Pinterest 31 | NSHumanReadableCopyright 32 | Copyright © 2017 Pinterest. All rights reserved. 33 | 34 | 35 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/button_bar_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure_open.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/library_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/title_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Tokens1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/intf/PINOperationReference 7 | Cancels all queued operations 8 | PINOperationQueue.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Tokens3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-shm -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-wal -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.mom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.mom -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.skidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.skidx -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.toc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.toc -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.tokencache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.tokencache -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/button_bar_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/disclosure.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/disclosure_open.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/library_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/docs/html/img/title_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Carthage/Checkouts/PINOperation/run_tests_update_status.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eo pipefail 3 | 4 | UPDATE_STATUS_PATH=$1 5 | BUILDKITE_PULL_REQUEST=$2 6 | BUILDKITE_BUILD_URL=$3 7 | 8 | function updateStatus() { 9 | if [ "${BUILDKITE_PULL_REQUEST}" != "false" ] ; then 10 | ${UPDATE_STATUS_PATH} "pinterest" "PINOperation" ${BUILDKITE_PULL_REQUEST} "$1" ${BUILDKITE_BUILD_URL} "$2" "CI/Pinterest" 11 | fi 12 | } 13 | 14 | if [[ -z "${UPDATE_STATUS_PATH}" || -z "${BUILDKITE_PULL_REQUEST}" || -z "${BUILDKITE_BUILD_URL}" ]] ; then 15 | echo "Update status path (${UPDATE_STATUS_PATH}), pull request (${BUILDKITE_BUILD_URL}) or build url (${BUILDKITE_PULL_REQUEST}) unset." 16 | trap - EXIT 17 | exit 255 18 | fi 19 | 20 | trapped="false" 21 | function trap_handler() { 22 | if [[ "$trapped" = "false" ]]; then 23 | updateStatus failure "Tests failed…" 24 | echo "Tests failed, updated status to failure" 25 | fi 26 | trapped="true" 27 | } 28 | trap trap_handler INT TERM EXIT 29 | 30 | updateStatus pending "Starting build…" 31 | 32 | make all 33 | 34 | updateStatus success "Tests passed" 35 | 36 | echo "All tests succeeded, updated status to success" 37 | trap - EXIT 38 | exit 0 -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // PINCache-SPM-Integration 4 | // 5 | // Created by Petro Rovenskyy on 19.11.2020. 6 | // 7 | 8 | import SwiftUI 9 | import PINCache 10 | 11 | struct ContentView: View { 12 | let cacheKey: String 13 | @State 14 | private var cachedValue: String = "loading..." 15 | var body: some View { 16 | Text(cachedValue) 17 | .onAppear(perform: loadValue) 18 | .padding() 19 | } 20 | private func loadValue() { 21 | PINCache.shared.object(forKeyAsync: self.cacheKey, completion: { (_, _, object) in 22 | if let object: String = object as? String { 23 | self.cachedValue = object 24 | return 25 | } 26 | self.cachedValue = "Failed to load value from cache" 27 | }) 28 | } 29 | } 30 | 31 | struct ContentView_Previews: PreviewProvider { 32 | static var previews: some View { 33 | ContentView(cacheKey: AppDelegate.cacheKey) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration/PINCache_SPM_IntegrationApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PINCache_SPM_IntegrationApp.swift 3 | // PINCache-SPM-Integration 4 | // 5 | // Created by Petro Rovenskyy on 19.11.2020. 6 | // 7 | 8 | import SwiftUI 9 | import PINCache 10 | 11 | final class AppDelegate: UIResponder, UIApplicationDelegate { 12 | static let cacheKey: String = "pinCache" 13 | func application(_ application: UIApplication, 14 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 15 | PINCache.shared.setObject("Hello! I'm cached string", 16 | forKey: Self.cacheKey) 17 | return true 18 | } 19 | } 20 | 21 | @main 22 | struct PINCache_SPM_IntegrationApp: App { 23 | @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate 24 | var body: some Scene { 25 | WindowGroup { 26 | ContentView(cacheKey: AppDelegate.cacheKey) 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/IntegrationTests/PINCache-SPM-Integration/PINCache-SPM-Integration/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/PINCache.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/PINCache.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/PINCache.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/PINCache.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Scripts/tag-release-branch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | echo "Tagging release branch" 5 | TAG=$NEW_VERSION 6 | 7 | echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV 8 | git tag $TAG 9 | git push origin --tags 10 | 11 | echo "Setting Release Notes" 12 | cat CHANGELOG.md | awk '/^#/{f=1} f; /^#/ && ++c==3{exit}' | sed '$ d' > RELEASE_NOTES.md 13 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2017 Pinterest. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/PINCacheMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINCacheMacros.h 3 | // PINCache 4 | // 5 | // Created by Adlai Holler on 1/31/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #ifndef PIN_SUBCLASSING_RESTRICTED 10 | #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 11 | #define PIN_SUBCLASSING_RESTRICTED __attribute__((objc_subclassing_restricted)) 12 | #else 13 | #define PIN_SUBCLASSING_RESTRICTED 14 | #endif // #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 15 | #endif // #ifndef PIN_SUBCLASSING_RESTRICTED 16 | 17 | #ifndef PIN_NOESCAPE 18 | #if defined(__has_attribute) && __has_attribute(noescape) 19 | #define PIN_NOESCAPE __attribute__((noescape)) 20 | #else 21 | #define PIN_NOESCAPE 22 | #endif // #if defined(__has_attribute) && __has_attribute(noescape) 23 | #endif // #ifndef PIN_NOESCAPE 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/PINCacheObjectSubscripting.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINCacheObjectSubscripting.h 3 | // PINCache 4 | // 5 | // Created by Rocir Marcos Leite Santiago on 4/2/16. 6 | // Copyright © 2016 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @protocol PINCacheObjectSubscripting 14 | 15 | @required 16 | 17 | /** 18 | This method enables using literals on the receiving object, such as `id object = cache[@"key"];`. 19 | 20 | @param key The key associated with the object. 21 | @result The object for the specified key. 22 | */ 23 | - (nullable id)objectForKeyedSubscript:(NSString *)key; 24 | 25 | /** 26 | This method enables using literals on the receiving object, such as `cache[@"key"] = object;`. 27 | 28 | @param object An object to be assigned for the key. Pass `nil` to remove the existing object for this key. 29 | @param key A key to associate with the object. This string will be copied. 30 | */ 31 | - (void)setObject:(nullable id)object forKeyedSubscript:(NSString *)key; 32 | 33 | @end 34 | 35 | NS_ASSUME_NONNULL_END 36 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyTrackingDomains 8 | 9 | NSPrivacyCollectedDataTypes 10 | 11 | NSPrivacyAccessedAPITypes 12 | 13 | 14 | NSPrivacyAccessedAPIType 15 | NSPrivacyAccessedAPICategoryFileTimestamp 16 | NSPrivacyAccessedAPITypeReasons 17 | 18 | 0A2A.1 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/include/PINCache/PINCache.h: -------------------------------------------------------------------------------- 1 | ../../PINCache.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/include/PINCache/PINCacheMacros.h: -------------------------------------------------------------------------------- 1 | ../../PINCacheMacros.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/include/PINCache/PINCacheObjectSubscripting.h: -------------------------------------------------------------------------------- 1 | ../../PINCacheObjectSubscripting.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/include/PINCache/PINCaching.h: -------------------------------------------------------------------------------- 1 | ../../PINCaching.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/include/PINCache/PINDiskCache.h: -------------------------------------------------------------------------------- 1 | ../../PINDiskCache.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Source/include/PINCache/PINMemoryCache.h: -------------------------------------------------------------------------------- 1 | ../../PINMemoryCache.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Tests/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/Tests/Default-568h@2x.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Tests/NSDate+PINCacheTests.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | NS_ASSUME_NONNULL_BEGIN 4 | 5 | @interface NSDate (PINCacheTests) 6 | 7 | /** Swizzles +[NSDate date] to always return the specified date. */ 8 | + (void)startMockingDateWithDate:(NSDate *)date; 9 | 10 | /** Stops swizzling +[NSDate date] and returns to original implementation */ 11 | + (void)stopMockingDate; 12 | 13 | @end 14 | 15 | NS_ASSUME_NONNULL_END 16 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Tests/PINCacheTests.h: -------------------------------------------------------------------------------- 1 | // PINCache is a modified version of TMCache 2 | // Modifications by Garrett Moon 3 | // Copyright (c) 2015 Pinterest. All rights reserved. 4 | 5 | #import 6 | 7 | extern const NSTimeInterval PINCacheTestBlockTimeout; 8 | 9 | @interface PINCacheTests : XCTestCase 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface PINDiskCache (PINCacheTests) 4 | 5 | /** 6 | Sets `ttlCache` property synchronously. This is normally set asyncronously, but for testing purposes it is useful block until the 7 | actual value has been set. 8 | */ 9 | - (void)setTtlCacheSync:(BOOL)ttlCache; 10 | 11 | /** 12 | Waits until all metadata has been read off the disk 13 | */ 14 | - (void)waitForKnownState; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/Tests/PINDiskCache+PINCacheTests.m: -------------------------------------------------------------------------------- 1 | #import "PINDiskCache+PINCacheTests.h" 2 | 3 | @interface PINDiskCache () { 4 | BOOL _ttlCache; 5 | } 6 | 7 | - (void)lock; 8 | - (void)lockAndWaitForKnownState; 9 | - (void)unlock; 10 | 11 | @end 12 | 13 | @implementation PINDiskCache (PINCacheTests) 14 | 15 | - (void)setTtlCacheSync:(BOOL)ttlCache 16 | { 17 | [self lock]; 18 | [self setValue:@(ttlCache) forKey:@"_ttlCache"]; 19 | [self unlock]; 20 | } 21 | 22 | - (void)waitForKnownState 23 | { 24 | [self lockAndWaitForKnownState]; 25 | [self unlock]; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/build_docs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | appledoc \ 4 | --company-id com.pinterest \ 5 | --project-name PINCache \ 6 | --project-company Pinterest \ 7 | --project-version 2.0 \ 8 | --docset-min-xcode-version 4.3 \ 9 | --docset-bundle-id %COMPANYID.%PROJECTID \ 10 | --docset-bundle-name "%PROJECT %VERSION" \ 11 | --docset-bundle-filename %COMPANYID.%PROJECTID-%VERSIONID.docset \ 12 | --ignore "tests" \ 13 | --ignore "docs" \ 14 | --ignore "*.m" \ 15 | --no-repeat-first-par \ 16 | --explicit-crossref \ 17 | --clean-output \ 18 | --keep-intermediate-files \ 19 | --output ./docs \ 20 | . 21 | 22 | mv docs/docset docs/com.pinterest.PINCache-2.0.docset 23 | rm docs/docset-installed.txt 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | com.pinterest.PINCache 9 | CFBundleName 10 | PINCache 2.0 11 | CFBundleShortVersionString 12 | 2.0 13 | CFBundleVersion 14 | 2.0 15 | 16 | 17 | 18 | 19 | DocSetFeedName 20 | PINCache Documentation 21 | 22 | DocSetMinimumXcodeVersion 23 | 4.3 24 | 25 | DashDocSetFamily 26 | appledoc 27 | DocSetPublisherIdentifier 28 | com.pinterest.documentation 29 | DocSetPublisherName 30 | Pinterest 31 | NSHumanReadableCopyright 32 | Copyright © 2016 Pinterest. All rights reserved. 33 | 34 | 35 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/button_bar_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/disclosure.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/disclosure_open.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/library_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Documents/img/title_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens11.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/Tokens9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.dsidx-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.dsidx-shm -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.dsidx-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.dsidx-wal -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.mom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.mom -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.skidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.skidx -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.toc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.toc -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.tokencache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/com.pinterest.PINCache-2.0.docset/Contents/Resources/docSet.tokencache -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/html/img/button_bar_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/html/img/disclosure.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/html/img/disclosure_open.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/html/img/library_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINCache/docs/html/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINCache/docs/html/img/title_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/.github_changelog_generator: -------------------------------------------------------------------------------- 1 | issues=false 2 | since-tag=1.2.1 3 | future-release=1.2.2 4 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Xcode 4 | # 5 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 6 | 7 | ## Build generated 8 | build/ 9 | DerivedData/ 10 | 11 | ## Various settings 12 | *.pbxuser 13 | !default.pbxuser 14 | *.mode1v3 15 | !default.mode1v3 16 | *.mode2v3 17 | !default.mode2v3 18 | *.perspectivev3 19 | !default.perspectivev3 20 | xcuserdata/ 21 | 22 | ## Other 23 | *.moved-aside 24 | *.xcuserstate 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | *.dSYM.zip 30 | *.dSYM 31 | 32 | ## Docs 33 | docs/docsets/ 34 | 35 | ## Playgrounds 36 | timeline.xctimeline 37 | playground.xcworkspace 38 | 39 | # Swift Package Manager 40 | # 41 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 42 | # Packages/ 43 | .build/ 44 | 45 | # Carthage 46 | # 47 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 48 | # Carthage/Checkouts 49 | 50 | Carthage/Build 51 | 52 | # Bundler 53 | .bundle 54 | vendor 55 | 56 | # Example project 57 | Example/Pods 58 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/BUCK: -------------------------------------------------------------------------------- 1 | apple_library( 2 | name = 'PINOperation', 3 | modular = True, 4 | exported_headers = glob(['Source/*.h']), 5 | srcs = 6 | glob(['Source/*.m']), 7 | preprocessor_flags = ['-fobjc-arc'], 8 | lang_preprocessor_flags = { 9 | 'C': ['-std=gnu99'], 10 | 'CXX': ['-std=gnu++11', '-stdlib=libc++'], 11 | }, 12 | linker_flags = [ 13 | '-weak_framework', 14 | 'UIKit', 15 | '-weak_framework', 16 | 'AppKit', 17 | ], 18 | frameworks = [ 19 | '$SDKROOT/System/Library/Frameworks/Foundation.framework', 20 | ], 21 | visibility = ['PUBLIC'], 22 | ) 23 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/CI/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eo pipefail 3 | 4 | make all -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/CI/exclude-from-build.json: -------------------------------------------------------------------------------- 1 | [ 2 | "^plans/", 3 | "^docs/", 4 | "^CI/exclude-from-build.json$", 5 | "^README.md$", 6 | "^CHANGELOG.md$" 7 | ] -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/PINOperationExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/PINOperationExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // PINOperationExample 4 | // 5 | // Created by Martin Púčik on 02/05/2020. 6 | // Copyright © 2020 Pinterest. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | final class AppDelegate: UIResponder, UIApplicationDelegate { 13 | private let queue: PINOperationQueue = PINOperationQueue(maxConcurrentOperations: 5) 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | let operationCount = 100 17 | let group = DispatchGroup() 18 | for _ in 0.. 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MainViewController : UIViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/PINOperationExample/PINOperationExample-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://cdn.cocoapods.org/' 2 | platform :ios, '12.0' 3 | 4 | target 'PINOperationExample' do 5 | pod 'PINOperation', :path => '../' 6 | end 7 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PINOperation (1.2.3) 3 | 4 | DEPENDENCIES: 5 | - PINOperation (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | PINOperation: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | PINOperation: fb563bcc9c32c26d6c78aaff967d405aa2ee74a7 13 | 14 | PODFILE CHECKSUM: 590bbecb30df161f3cdb5ab267c95244b0df928f 15 | 16 | COCOAPODS: 1.15.2 17 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/PINOperation.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'PINOperation' 3 | s.version = '1.2.3' 4 | s.homepage = 'https://github.com/pinterest/PINOperation' 5 | s.summary = 'Fast, concurrency-limited task queue for iOS and OS X.' 6 | s.authors = { 'Garrett Moon' => 'garrett@pinterest.com' } 7 | s.source = { :git => 'https://github.com/pinterest/PINOperation.git', :tag => "#{s.version}" } 8 | s.license = { :type => 'Apache 2.0', :file => 'LICENSE.txt' } 9 | s.requires_arc = true 10 | s.frameworks = 'Foundation' 11 | s.cocoapods_version = '>= 1.13.0' 12 | s.ios.deployment_target = '12.0' 13 | s.osx.deployment_target = '10.13' 14 | s.tvos.deployment_target = '12.0' 15 | s.visionos.deployment_target = '1.0' 16 | s.watchos.deployment_target = '4.0' 17 | pch_PIN = <<-EOS 18 | #ifndef TARGET_OS_WATCH 19 | #define TARGET_OS_WATCH 0 20 | #endif 21 | EOS 22 | s.prefix_header_contents = pch_PIN 23 | s.source_files = 'Source/*.{h,m}' 24 | s.resource_bundles = { 'PINOperation' => ['Source/PrivacyInfo.xcprivacy'] } 25 | end 26 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/PINOperation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/PINOperation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/RELEASE.md: -------------------------------------------------------------------------------- 1 | # Release Process 2 | This document describes the process for a public PINOperation release. 3 | 4 | ### Process 5 | - Ensure the latest master build is green. 6 | - Run the github action 'Create Release'. 7 | - Check that the release was successfully published to [Github](https://github.com/pinterest/PINOperation/releases) and [Cocoapods](https://cocoapods.org/pods/PINOperation). 8 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Scripts/tag-release-branch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | echo "Tagging release branch" 5 | TAG=$NEW_VERSION 6 | 7 | echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV 8 | git tag $TAG 9 | git push origin --tags 10 | 11 | echo "Setting Release Notes" 12 | cat CHANGELOG.md | awk '/^#/{f=1} f; /^#/ && ++c==3{exit}' | sed '$ d' > RELEASE_NOTES.md 13 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2017 Pinterest. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/PINOperation.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperation.h 3 | // PINOperation 4 | // 5 | // Created by Adlai Holler on 1/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | #import 13 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/PINOperationGroup.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperationGroup.h 3 | // PINOperation 4 | // 5 | // Created by Garrett Moon on 10/8/16. 6 | // Copyright © 2016 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @class PINOperationQueue; 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @protocol PINGroupOperationReference; 18 | 19 | PINOP_SUBCLASSING_RESTRICTED 20 | @interface PINOperationGroup : NSObject 21 | 22 | - (instancetype)init NS_UNAVAILABLE; 23 | + (instancetype)asyncOperationGroupWithQueue:(PINOperationQueue *)operationQueue; 24 | 25 | - (nullable id )addOperation:(dispatch_block_t)operation; 26 | - (nullable id )addOperation:(dispatch_block_t)operation withPriority:(PINOperationQueuePriority)priority; 27 | - (void)start; 28 | - (void)cancel; 29 | - (void)setCompletion:(dispatch_block_t)completion; 30 | - (void)waitUntilComplete; 31 | 32 | @end 33 | 34 | @protocol PINGroupOperationReference 35 | 36 | @end 37 | 38 | NS_ASSUME_NONNULL_END 39 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/PINOperationMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperationMacros.h 3 | // PINOperation 4 | // 5 | // Created by Adlai Holler on 1/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #ifndef PINOP_SUBCLASSING_RESTRICTED 10 | #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 11 | #define PINOP_SUBCLASSING_RESTRICTED __attribute__((objc_subclassing_restricted)) 12 | #else 13 | #define PINOP_SUBCLASSING_RESTRICTED 14 | #endif // #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 15 | #endif // #ifndef PINOP_SUBCLASSING_RESTRICTED 16 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/PINOperationTypes.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINOperationTypes.h 3 | // PINOperation 4 | // 5 | // Created by Adlai Holler on 1/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSUInteger, PINOperationQueuePriority) { 12 | PINOperationQueuePriorityLow, 13 | PINOperationQueuePriorityDefault, 14 | PINOperationQueuePriorityHigh, 15 | }; 16 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyTrackingDomains 8 | 9 | NSPrivacyCollectedDataTypes 10 | 11 | NSPrivacyAccessedAPITypes 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperation.h: -------------------------------------------------------------------------------- 1 | ../../PINOperation.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationGroup.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationGroup.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationMacros.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationMacros.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationQueue.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationQueue.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Source/include/PINOperation/PINOperationTypes.h: -------------------------------------------------------------------------------- 1 | ../../PINOperationTypes.h -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/build_docs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | appledoc \ 4 | --company-id com.pinterest \ 5 | --project-name PINOperation \ 6 | --project-company Pinterest \ 7 | --project-version 1.0 \ 8 | --docset-min-xcode-version 4.3 \ 9 | --docset-bundle-id %COMPANYID.%PROJECTID \ 10 | --docset-bundle-name "%PROJECT %VERSION" \ 11 | --docset-bundle-filename %COMPANYID.%PROJECTID-%VERSIONID.docset \ 12 | --ignore "tests" \ 13 | --ignore "docs" \ 14 | --ignore "*.m" \ 15 | --no-repeat-first-par \ 16 | --explicit-crossref \ 17 | --clean-output \ 18 | --keep-intermediate-files \ 19 | --output ./docs \ 20 | . 21 | 22 | mv docs/docset docs/com.pinterest.PINOperation-1.0.docset 23 | rm docs/docset-installed.txt 24 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/build_tests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Have to specify destination because http://www.openradar.me/23857648 4 | xcodebuild ONLY_ACTIVE_ARCH=NO -project tests/PINOperation.xcodeproj -scheme PINOperationTests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' clean build test 5 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | com.pinterest.PINOperationQueue 9 | CFBundleName 10 | PINOperationQueue 1.0 11 | CFBundleShortVersionString 12 | 1.0 13 | CFBundleVersion 14 | 1.0 15 | 16 | 17 | 18 | 19 | DocSetFeedName 20 | PINOperationQueue Documentation 21 | 22 | DocSetMinimumXcodeVersion 23 | 4.3 24 | 25 | DashDocSetFamily 26 | appledoc 27 | DocSetPublisherIdentifier 28 | com.pinterest.documentation 29 | DocSetPublisherName 30 | Pinterest 31 | NSHumanReadableCopyright 32 | Copyright © 2017 Pinterest. All rights reserved. 33 | 34 | 35 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/button_bar_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/disclosure_open.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/library_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Documents/img/title_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Tokens1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/intf/PINOperationReference 7 | Cancels all queued operations 8 | PINOperationQueue.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/Tokens3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-shm -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.dsidx-wal -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.mom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.mom -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.skidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.skidx -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.toc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.toc -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.tokencache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/com.pinterest.PINOperationQueue-1.0.docset/Contents/Resources/docSet.tokencache -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/html/img/button_bar_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/html/img/disclosure.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/html/img/disclosure_open.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/html/img/library_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/docs/html/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Carthage/Checkouts/PINOperation/docs/html/img/title_background.png -------------------------------------------------------------------------------- /Carthage/Checkouts/PINOperation/run_tests_update_status.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eo pipefail 3 | 4 | UPDATE_STATUS_PATH=$1 5 | BUILDKITE_PULL_REQUEST=$2 6 | BUILDKITE_BUILD_URL=$3 7 | 8 | function updateStatus() { 9 | if [ "${BUILDKITE_PULL_REQUEST}" != "false" ] ; then 10 | ${UPDATE_STATUS_PATH} "pinterest" "PINOperation" ${BUILDKITE_PULL_REQUEST} "$1" ${BUILDKITE_BUILD_URL} "$2" "CI/Pinterest" 11 | fi 12 | } 13 | 14 | if [[ -z "${UPDATE_STATUS_PATH}" || -z "${BUILDKITE_PULL_REQUEST}" || -z "${BUILDKITE_BUILD_URL}" ]] ; then 15 | echo "Update status path (${UPDATE_STATUS_PATH}), pull request (${BUILDKITE_BUILD_URL}) or build url (${BUILDKITE_PULL_REQUEST}) unset." 16 | trap - EXIT 17 | exit 255 18 | fi 19 | 20 | trapped="false" 21 | function trap_handler() { 22 | if [[ "$trapped" = "false" ]]; then 23 | updateStatus failure "Tests failed…" 24 | echo "Tests failed, updated status to failure" 25 | fi 26 | trapped="true" 27 | } 28 | trap trap_handler INT TERM EXIT 29 | 30 | updateStatus pending "Starting build…" 31 | 32 | make all 33 | 34 | updateStatus success "Tests passed" 35 | 36 | echo "All tests succeeded, updated status to success" 37 | trap - EXIT 38 | exit 0 -------------------------------------------------------------------------------- /Examples/Example-Mac/Example-Mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/Example-Mac/Example-Mac.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example-Mac/Example-Mac.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/Example-Mac/Example-Mac.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/APNGViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // APNGViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 4/23/18. 6 | // Copyright © 2018 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface APNGViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/APNGViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // APNGViewController.m 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 4/23/18. 6 | // Copyright © 2018 mischneider. All rights reserved. 7 | // 8 | 9 | #import "APNGViewController.h" 10 | 11 | #import 12 | 13 | @interface APNGViewController () 14 | 15 | @property (weak) IBOutlet PINAnimatedImageView *animatedImageView; 16 | 17 | @end 18 | 19 | @implementation APNGViewController 20 | 21 | - (void)viewWillAppear { 22 | [super viewWillAppear]; 23 | [self.animatedImageView pin_setImageFromURL:[NSURL URLWithString:@"https://upload.wikimedia.org/wikipedia/commons/1/14/Animated_PNG_example_bouncing_beach_ball.png"]]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/AnimatedWebPViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatedWebPViewController.h 3 | // Example-Mac 4 | // 5 | // Created by Andy Finnell on 5/15/24. 6 | // Copyright © 2024 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface AnimatedWebPViewController : NSViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/AnimatedWebPViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatedWebPViewController.m 3 | // Example-Mac 4 | // 5 | // Created by Andy Finnell on 5/15/24. 6 | // Copyright © 2024 mischneider. All rights reserved. 7 | // 8 | 9 | #import "AnimatedWebPViewController.h" 10 | #import 11 | 12 | @interface AnimatedWebPViewController () 13 | @property (weak) IBOutlet PINAnimatedImageView *animatedImageView; 14 | @end 15 | 16 | @implementation AnimatedWebPViewController 17 | 18 | - (void)viewWillAppear { 19 | [super viewWillAppear]; 20 | [self.animatedImageView pin_setImageFromURL:[NSURL URLWithString:@"https://mathiasbynens.be/demo/animated-webp-supported.webp"]]; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/3/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : NSObject 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/Assets.xcassets/white-pinterest-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "white-pinterest-logo@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "white-pinterest-logo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/Assets.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Example-Mac/PINRemoteImage/Assets.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/Assets.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Example-Mac/PINRemoteImage/Assets.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@2x.png -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/DegradedViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DegradedViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DegradedViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/GIFViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // GIFViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 4/23/18. 6 | // Copyright © 2018 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface GIFViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/GIFViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // GIFViewController.m 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 4/23/18. 6 | // Copyright © 2018 mischneider. All rights reserved. 7 | // 8 | 9 | #import "GIFViewController.h" 10 | 11 | #import 12 | 13 | @interface GIFViewController () 14 | 15 | @property (weak) IBOutlet PINAnimatedImageView *animatedImageView; 16 | 17 | @end 18 | 19 | @implementation GIFViewController 20 | 21 | - (void)viewWillAppear { 22 | [super viewWillAppear]; 23 | [self.animatedImageView pin_setImageFromURL:[NSURL URLWithString:@"https://i.pinimg.com/originals/f5/23/f1/f523f141646b613f78566ba964208990.gif"]]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSHumanReadableCopyright 28 | Copyright © 2016 mischneider. All rights reserved. 29 | NSMainNibFile 30 | MainMenu 31 | NSPrincipalClass 32 | NSApplication 33 | 34 | 35 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/PINViewWithBackgroundColor.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINViewWithBackgroundColor.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/5/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PINViewWithBackgroundColor : NSView 12 | 13 | @property (nonatomic, strong) NSColor *backgroundColor; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/ProcessingViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ProcessingViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ProcessingViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/ProgressiveViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressiveViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ProgressiveViewController : NSViewController 12 | 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/ScrollViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ScrollViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ScrollViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/WebPViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // WebPViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface WebPViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/WebPViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // WebPViewController.m 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import "WebPViewController.h" 10 | 11 | #import 12 | 13 | @interface WebPViewController () 14 | @property (weak) IBOutlet NSImageView *imageView; 15 | @end 16 | 17 | @implementation WebPViewController 18 | 19 | #pragma mark - Lifecycle 20 | 21 | - (instancetype)init 22 | { 23 | self = [super initWithNibName:NSStringFromClass(self.class) bundle:nil]; 24 | if (self == nil) { return self; } 25 | return self; 26 | } 27 | 28 | 29 | #pragma mark - NSViewController 30 | 31 | - (void)viewWillAppear 32 | { 33 | [super viewWillAppear]; 34 | 35 | [self.imageView pin_setImageFromURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/samdutton/simpl/main/picturetype/kittens.webp"]]; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Examples/Example-Mac/PINRemoteImage/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/3/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) { 12 | return NSApplicationMain(argc, argv); 13 | } 14 | -------------------------------------------------------------------------------- /Examples/Example-Mac/Podfile: -------------------------------------------------------------------------------- 1 | platform :macos, 11.0 2 | 3 | target 'Example-Mac' do 4 | pod "PINRemoteImage/OSX", :path => "../../" 5 | pod "PINRemoteImage/PINCache", :path => "../../" 6 | pod "PINCache" 7 | end 8 | -------------------------------------------------------------------------------- /Examples/Example-Mac/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PINCache (3.0.4): 3 | - PINCache/Arc-exception-safe (= 3.0.4) 4 | - PINCache/Core (= 3.0.4) 5 | - PINCache/Arc-exception-safe (3.0.4): 6 | - PINCache/Core 7 | - PINCache/Core (3.0.4): 8 | - PINOperation (~> 1.2.3) 9 | - PINOperation (1.2.3) 10 | - PINRemoteImage/Core (3.0.4): 11 | - PINOperation 12 | - PINRemoteImage/OSX (3.0.4): 13 | - PINRemoteImage/Core 14 | - PINRemoteImage/PINCache (3.0.4): 15 | - PINCache (~> 3.0.4) 16 | - PINRemoteImage/Core 17 | 18 | DEPENDENCIES: 19 | - PINCache 20 | - PINRemoteImage/OSX (from `../../`) 21 | - PINRemoteImage/PINCache (from `../../`) 22 | 23 | SPEC REPOS: 24 | trunk: 25 | - PINCache 26 | - PINOperation 27 | 28 | EXTERNAL SOURCES: 29 | PINRemoteImage: 30 | :path: "../../" 31 | 32 | SPEC CHECKSUMS: 33 | PINCache: d9a87a0ff397acffe9e2f0db972ac14680441158 34 | PINOperation: fb563bcc9c32c26d6c78aaff967d405aa2ee74a7 35 | PINRemoteImage: 6256a644f4996991f124811763c7286b2a63ff94 36 | 37 | PODFILE CHECKSUM: a04c05adb7772d865f0951358a8d41d8a62f76f4 38 | 39 | COCOAPODS: 1.15.2 40 | -------------------------------------------------------------------------------- /Examples/Example-Shared/Kitten.h: -------------------------------------------------------------------------------- 1 | // 2 | // Kitten.h 3 | // PINRemoteImage 4 | // 5 | // Created by Michael Schneider on 1/6/16. 6 | // Copyright © 2016 mischneider. All rights reserved. 7 | // 8 | #import 9 | 10 | #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED 11 | #import 12 | #else 13 | #import 14 | #endif 15 | 16 | @interface Kitten : NSObject 17 | 18 | @property (nonatomic, strong) NSURL *imageURL; 19 | @property (nonatomic, strong) id dominantColor; 20 | @property (nonatomic, assign) CGSize imageSize; 21 | 22 | + (void)fetchKittenForWidth:(CGFloat)width completion:(void (^)(NSArray *kittens))completion; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Examples/Example-Xcode-SPM/Example-Xcode-SPM.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/Example-Xcode-SPM/Example-Xcode-SPM.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example-Xcode-SPM/Example-Xcode-SPM/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/Example-Xcode-SPM/Example-Xcode-SPM/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/Example-Xcode-SPM/Example-Xcode-SPM/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Example-Xcode-SPM 4 | // 5 | // Created by Petro Rovenskyy on 02.12.2020. 6 | // 7 | 8 | import UIKit 9 | import PINRemoteImage 10 | 11 | class ViewController: UIViewController { 12 | @IBOutlet weak var info: UILabel! 13 | @IBOutlet weak var imgView: PINAnimatedImageView! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | // Do any additional setup after loading the view. 18 | self.info.text = "PINRemoteImage+SPM+Xcode=🥰" 19 | self.imgView.pin_updateWithProgress = true 20 | } 21 | override func viewWillAppear(_ animated: Bool) { 22 | super.viewWillAppear(animated) 23 | guard let imageURL = URL(string: "https://i.pinimg.com/originals/f5/23/f1/f523f141646b613f78566ba964208990.gif") else { 24 | return 25 | } 26 | self.imgView.pin_setImage(from: imageURL) 27 | } 28 | 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/Example-tvOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/Example-tvOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/Example-tvOS.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/Example-tvOS.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "size" : "1280x768", 5 | "idiom" : "tv", 6 | "filename" : "App Icon - Large.imagestack", 7 | "role" : "primary-app-icon" 8 | }, 9 | { 10 | "size" : "400x240", 11 | "idiom" : "tv", 12 | "filename" : "App Icon - Small.imagestack", 13 | "role" : "primary-app-icon" 14 | }, 15 | { 16 | "size" : "1920x720", 17 | "idiom" : "tv", 18 | "filename" : "Top Shelf Image.imageset", 19 | "role" : "top-shelf-image" 20 | } 21 | ], 22 | "info" : { 23 | "version" : 1, 24 | "author" : "xcode" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "landscape", 5 | "idiom" : "tv", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "9.0", 8 | "scale" : "1x" 9 | } 10 | ], 11 | "info" : { 12 | "version" : 1, 13 | "author" : "xcode" 14 | } 15 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/white-pinterest-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "filename" : "white-pinterest-logo@1x.png", 6 | "scale" : "1x" 7 | } 8 | ], 9 | "info" : { 10 | "version" : 1, 11 | "author" : "xcode" 12 | } 13 | } -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Example-tvOS/PINRemoteImage.tvOSExample/Assets.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/CollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionViewCell.swift 3 | // PINRemoteImage.tvOSExample 4 | // 5 | // Created by Isaac Overacker on 2/6/16. 6 | // 7 | // 8 | 9 | import UIKit 10 | 11 | class CollectionViewCell: UICollectionViewCell { 12 | 13 | @IBOutlet weak var imageView: UIImageView! 14 | 15 | override func prepareForReuse() { 16 | super.prepareForReuse() 17 | self.imageView.image = nil 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/DegradedViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DegradedViewController.swift 3 | // PINRemoteImage.tvOSExample 4 | // 5 | // Created by Isaac Overacker on 2/6/16. 6 | // 7 | // 8 | 9 | import UIKit 10 | import PINRemoteImage 11 | 12 | class DegradedViewController: UIViewController { 13 | 14 | @IBOutlet weak var imageView: UIImageView! 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | PINRemoteImageManager.shared().setShouldUpgradeLowQualityImages(true, completion: nil) 19 | } 20 | 21 | override func didReceiveMemoryWarning() { 22 | super.didReceiveMemoryWarning() 23 | // Dispose of any resources that can be recreated. 24 | } 25 | 26 | override func viewWillAppear(_ animated: Bool) { 27 | super.viewWillAppear(animated) 28 | 29 | imageView.pin_setImage(from: [ 30 | URL(string: "https://loremflickr.com/101/101")!, 31 | URL(string: "https://loremflickr.com/401/401")!, 32 | URL(string: "https://loremflickr.com/801/801")! 33 | ]) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/GIFViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GIFViewController.swift 3 | // PINRemoteImage.tvOSExample 4 | // 5 | // Created by Garrett Moon on 4/24/18. 6 | // 7 | 8 | import UIKit 9 | import PINRemoteImage 10 | 11 | class GIFViewController: UIViewController { 12 | 13 | @IBOutlet weak var imageView: PINAnimatedImageView! 14 | 15 | override func viewWillAppear(_ animated: Bool) { 16 | super.viewWillAppear(animated) 17 | 18 | imageView.pin_setImage(from: URL(string: "https://i.pinimg.com/originals/f5/23/f1/f523f141646b613f78566ba964208990.gif")) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | arm64 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/PINRemoteImage.tvOSExample/WebPViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WebPViewController.swift 3 | // PINRemoteImage.tvOSExample 4 | // 5 | // Created by Garrett Moon on 4/24/18. 6 | // 7 | 8 | import UIKit 9 | import PINRemoteImage 10 | 11 | class WebPViewController: UIViewController { 12 | 13 | @IBOutlet weak var imageView: UIImageView! 14 | 15 | override func viewWillAppear(_ animated: Bool) { 16 | super.viewWillAppear(animated) 17 | 18 | imageView.pin_setImage(from: URL(string: "https://raw.githubusercontent.com/samdutton/simpl/main/picturetype/kittens.webp")) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | platform :tvos, 14.0 4 | 5 | target 'Example-tvOS' do 6 | pod "PINRemoteImage/iOS", :path => "../../" 7 | end 8 | -------------------------------------------------------------------------------- /Examples/Example-tvOS/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PINOperation (1.2.3) 3 | - PINRemoteImage/Core (3.0.4): 4 | - PINOperation 5 | - PINRemoteImage/iOS (3.0.4): 6 | - PINRemoteImage/Core 7 | 8 | DEPENDENCIES: 9 | - PINRemoteImage/iOS (from `../../`) 10 | 11 | SPEC REPOS: 12 | trunk: 13 | - PINOperation 14 | 15 | EXTERNAL SOURCES: 16 | PINRemoteImage: 17 | :path: "../../" 18 | 19 | SPEC CHECKSUMS: 20 | PINOperation: fb563bcc9c32c26d6c78aaff967d405aa2ee74a7 21 | PINRemoteImage: 6256a644f4996991f124811763c7286b2a63ff94 22 | 23 | PODFILE CHECKSUM: 92fdbb41115684253472b196b5b53ee177e9f4b9 24 | 25 | COCOAPODS: 1.15.2 26 | -------------------------------------------------------------------------------- /Examples/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example/Example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/Example/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/APNGViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // APNGViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by SAGESSE on 2020/2/28. 6 | // Copyright © 2020 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @interface APNGViewController : UIViewController 14 | 15 | @property (nonatomic, weak) IBOutlet PINAnimatedImageView *animatedImageView; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/AnimatedWebPViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatedWebPViewController.h 3 | // Example 4 | // 5 | // Created by Andy Finnell on 5/15/24. 6 | // Copyright © 2024 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface AnimatedWebPViewController : UIViewController 16 | 17 | @property (nonatomic, weak) IBOutlet PINAnimatedImageView *animatedImageView; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/AnimatedWebPViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatedWebPViewController.m 3 | // Example 4 | // 5 | // Created by Andy Finnell on 5/15/24. 6 | // Copyright © 2024 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import "AnimatedWebPViewController.h" 10 | #import 11 | 12 | @interface AnimatedWebPViewController () 13 | 14 | @end 15 | 16 | @implementation AnimatedWebPViewController 17 | 18 | - (void)viewWillAppear:(BOOL)animated 19 | { 20 | [super viewWillAppear:animated]; 21 | [self.animatedImageView pin_setImageFromURL:[NSURL URLWithString:@"https://mathiasbynens.be/demo/animated-webp-supported.webp"]]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/DegradedViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DegradedViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 7/14/15. 6 | // Copyright (c) 2015 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DegradedViewController : UIViewController 12 | 13 | @property (nonatomic, weak) IBOutlet UIImageView *imageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/GIFViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // GIFViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 4/17/18. 6 | // Copyright © 2018 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @interface GIFViewController : UIViewController 14 | 15 | @property (nonatomic, weak) IBOutlet PINAnimatedImageView *animatedImageView; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/Media.xcassets/white-pinterest-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "white-pinterest-logo@1x.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "white-pinterest-logo@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Example/PINRemoteImage/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Example/PINRemoteImage/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@2x.png -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/PINAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINAppDelegate.h 3 | // PINRemoteImage 4 | // 5 | // Created by CocoaPods on 08/11/2014. 6 | // Copyright (c) 2014 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PINAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/PINViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 08/11/2014. 6 | // Copyright (c) 2014 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PINViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/ProcessingViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ProcessingViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 7/16/15. 6 | // Copyright (c) 2015 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ProcessingViewController : UIViewController 12 | 13 | @property (nonatomic, weak) IBOutlet UIImageView *imageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/ProgressiveViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressiveViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 7/14/15. 6 | // Copyright (c) 2015 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ProgressiveViewController : UIViewController 12 | 13 | @property (nonatomic, weak) IBOutlet UIImageView *imageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/WebPViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // WebPViewController.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 7/14/15. 6 | // Copyright (c) 2015 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface WebPViewController : UIViewController 12 | 13 | @property (nonatomic, weak) IBOutlet UIImageView *imageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Examples/Example/PINRemoteImage/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 08/11/2014. 6 | // Copyright (c) 2014 Garrett Moon. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "PINAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([PINAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/Example/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, 14.0 2 | 3 | def shared_pods 4 | pod "PINRemoteImage", :path => "../../" 5 | pod "PINRemoteImage/PINCache", :path => "../../" 6 | end 7 | 8 | target 'Example' do 9 | shared_pods 10 | end 11 | -------------------------------------------------------------------------------- /Examples/Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PINCache (3.0.4): 3 | - PINCache/Arc-exception-safe (= 3.0.4) 4 | - PINCache/Core (= 3.0.4) 5 | - PINCache/Arc-exception-safe (3.0.4): 6 | - PINCache/Core 7 | - PINCache/Core (3.0.4): 8 | - PINOperation (~> 1.2.3) 9 | - PINOperation (1.2.3) 10 | - PINRemoteImage (3.0.4): 11 | - PINRemoteImage/PINCache (= 3.0.4) 12 | - PINRemoteImage/Core (3.0.4): 13 | - PINOperation 14 | - PINRemoteImage/PINCache (3.0.4): 15 | - PINCache (~> 3.0.4) 16 | - PINRemoteImage/Core 17 | 18 | DEPENDENCIES: 19 | - PINRemoteImage (from `../../`) 20 | - PINRemoteImage/PINCache (from `../../`) 21 | 22 | SPEC REPOS: 23 | trunk: 24 | - PINCache 25 | - PINOperation 26 | 27 | EXTERNAL SOURCES: 28 | PINRemoteImage: 29 | :path: "../../" 30 | 31 | SPEC CHECKSUMS: 32 | PINCache: d9a87a0ff397acffe9e2f0db972ac14680441158 33 | PINOperation: fb563bcc9c32c26d6c78aaff967d405aa2ee74a7 34 | PINRemoteImage: 6256a644f4996991f124811763c7286b2a63ff94 35 | 36 | PODFILE CHECKSUM: b542b3c8c29f4086253ffdf2139d599970e1c2cb 37 | 38 | COCOAPODS: 1.15.2 39 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '14.0' 3 | # Uncomment this line if you're using Swift 4 | use_frameworks! 5 | 6 | target 'Swift-Example' do 7 | pod 'PINRemoteImage', :path => '../../' 8 | end 9 | 10 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PINCache (3.0.4): 3 | - PINCache/Arc-exception-safe (= 3.0.4) 4 | - PINCache/Core (= 3.0.4) 5 | - PINCache/Arc-exception-safe (3.0.4): 6 | - PINCache/Core 7 | - PINCache/Core (3.0.4): 8 | - PINOperation (~> 1.2.3) 9 | - PINOperation (1.2.3) 10 | - PINRemoteImage (3.0.4): 11 | - PINRemoteImage/PINCache (= 3.0.4) 12 | - PINRemoteImage/Core (3.0.4): 13 | - PINOperation 14 | - PINRemoteImage/PINCache (3.0.4): 15 | - PINCache (~> 3.0.4) 16 | - PINRemoteImage/Core 17 | 18 | DEPENDENCIES: 19 | - PINRemoteImage (from `../../`) 20 | 21 | SPEC REPOS: 22 | trunk: 23 | - PINCache 24 | - PINOperation 25 | 26 | EXTERNAL SOURCES: 27 | PINRemoteImage: 28 | :path: "../../" 29 | 30 | SPEC CHECKSUMS: 31 | PINCache: d9a87a0ff397acffe9e2f0db972ac14680441158 32 | PINOperation: fb563bcc9c32c26d6c78aaff967d405aa2ee74a7 33 | PINRemoteImage: 6256a644f4996991f124811763c7286b2a63ff94 34 | 35 | PODFILE CHECKSUM: 493be0577869744e7a142367f13f9f5aa0e6fb4c 36 | 37 | COCOAPODS: 1.15.2 38 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/APNGViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // APNGViewController.swift 3 | // Swift-Example 4 | // 5 | // Created by Garrett Moon on 4/24/18. 6 | // Copyright © 2018 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PINRemoteImage 11 | 12 | class APNGViewController: UIViewController { 13 | 14 | @IBOutlet weak var imageView: PINAnimatedImageView! 15 | 16 | override func viewWillAppear(_ animated: Bool) { 17 | super.viewWillAppear(animated) 18 | 19 | imageView.pin_setImage(from: URL(string: "https://upload.wikimedia.org/wikipedia/commons/1/14/Animated_PNG_example_bouncing_beach_ball.png")) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/DegradedViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DegradedViewController.swift 3 | // Swift-Example 4 | // 5 | // Created by Marius Landwehr on 23.01.16. 6 | // Copyright © 2016 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PINRemoteImage 11 | 12 | class DegradedViewController: UIViewController { 13 | 14 | @IBOutlet weak var imageView: UIImageView! 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | PINRemoteImageManager.shared().setShouldUpgradeLowQualityImages(true, completion: nil) 20 | } 21 | 22 | override func viewWillAppear(_ animated: Bool) { 23 | super.viewWillAppear(animated) 24 | 25 | imageView.pin_setImage(from: [ 26 | URL(string: "https://loremflickr.com/101/101")!, 27 | URL(string: "https://loremflickr.com/401/401")!, 28 | URL(string: "https://loremflickr.com/801/801")!]) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/GIFViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GIFViewController.swift 3 | // Swift-Example 4 | // 5 | // Created by Garrett Moon on 4/24/18. 6 | // Copyright © 2018 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PINRemoteImage 11 | 12 | class GIFViewController: UIViewController { 13 | 14 | @IBOutlet weak var imageView: PINAnimatedImageView! 15 | 16 | override func viewWillAppear(_ animated: Bool) { 17 | super.viewWillAppear(animated) 18 | 19 | imageView.pin_setImage(from: URL(string: "https://i.pinimg.com/originals/f5/23/f1/f523f141646b613f78566ba964208990.gif")) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/Media.xcassets/white-pinterest-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "white-pinterest-logo@1x.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "white-pinterest-logo@2x.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Swift-Example/Swift-Example/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@1x.png -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Examples/Swift-Example/Swift-Example/Media.xcassets/white-pinterest-logo.imageset/white-pinterest-logo@2x.png -------------------------------------------------------------------------------- /Examples/Swift-Example/Swift-Example/WebPViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WebPViewController.swift 3 | // Swift-Example 4 | // 5 | // Created by Marius Landwehr on 23.01.16. 6 | // Copyright © 2016 Marius Landwehr. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PINRemoteImage 11 | 12 | class WebPViewController: UIViewController { 13 | 14 | @IBOutlet weak var imageView: UIImageView! 15 | 16 | override func viewWillAppear(_ animated: Bool) { 17 | super.viewWillAppear(animated) 18 | 19 | imageView.pin_setImage(from: URL(string: "https://raw.githubusercontent.com/samdutton/simpl/main/picturetype/kittens.webp")) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /PINRemoteImage.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PINRemoteImage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /PINRemoteImage.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Latest 7 | 8 | 9 | -------------------------------------------------------------------------------- /PINRemoteImage.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /PINRemoteImage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /PINRemoteImage/PINRemoteImageTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /PINRemoteImage/PINRemoteImageTests/PINRemoteImageTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageTests.m 3 | // PINRemoteImageTests 4 | // 5 | // Created by Garrett Moon on 2/13/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PINRemoteImageTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation PINRemoteImageTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | # Release Process 2 | This document describes the process for a public PINRemoteImage release. 3 | 4 | ### Process 5 | - Ensure the latest master build is green. 6 | - Run the github action 'Create Release'. 7 | - Check that the release was successfully published to [Github](https://github.com/pinterest/PINRemoteImage/releases) and [Cocoapods](https://cocoapods.org/pods/PINRemoteImage). 8 | -------------------------------------------------------------------------------- /Scripts/tag-release-branch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | echo "Tagging release branch" 5 | TAG=$NEW_VERSION 6 | 7 | echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV 8 | git tag $TAG 9 | git push origin --tags 10 | 11 | echo "Setting Release Notes" 12 | cat CHANGELOG.md | awk '/^#/{f=1} f; /^#/ && ++c==3{exit}' | sed '$ d' > RELEASE_NOTES.md 13 | -------------------------------------------------------------------------------- /Source/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Source/Classes/.gitkeep -------------------------------------------------------------------------------- /Source/Classes/PINAlternateRepresentationProvider.m: -------------------------------------------------------------------------------- 1 | // 2 | // PINAlternateRepresentationProvider.m 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/17/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #import 12 | #import 13 | 14 | @implementation PINAlternateRepresentationProvider 15 | 16 | - (id)alternateRepresentationWithData:(NSData *)data options:(PINRemoteImageManagerDownloadOptions)options 17 | { 18 | if ([data pin_isAnimatedGIF]) { 19 | return [[PINCachedAnimatedImage alloc] initWithAnimatedImageData:data]; 20 | } 21 | #if PIN_WEBP 22 | if ([data pin_isAnimatedWebP]) { 23 | return [[PINCachedAnimatedImage alloc] initWithAnimatedImageData:data]; 24 | } 25 | #endif 26 | #if PIN_APNG 27 | if ([data pin_isAPNG]) { 28 | return [[PINCachedAnimatedImage alloc] initWithAnimatedImageData:data]; 29 | } 30 | #endif 31 | return nil; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Source/Classes/PINDisplayLink.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINDisplayLink.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 4/23/18. 6 | // 7 | 8 | #import 9 | 10 | #import 11 | 12 | #if PIN_TARGET_IOS 13 | #define PINDisplayLink CADisplayLink 14 | #elif PIN_TARGET_MAC 15 | @interface PINDisplayLink : NSObject 16 | 17 | + (PINDisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel; 18 | - (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode; 19 | - (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode; 20 | 21 | @property(getter=isPaused, nonatomic) BOOL paused; 22 | @property(nonatomic) NSInteger frameInterval; 23 | 24 | @end 25 | #endif 26 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageBasicCache.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageBasicCache.h 3 | // Pods 4 | // 5 | // Created by Aleksei Shevchenko on 7/28/16. 6 | // 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /** 13 | * Simplistic wrapper based on NSCache. 14 | * 15 | * No data is persisted on disk. The disk cache methods are no-op. 16 | */ 17 | @interface PINRemoteImageBasicCache : NSObject 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageCallbacks.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageCallbacks.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/9/15. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @interface PINRemoteImageCallbacks : NSObject 14 | 15 | @property (atomic, strong, nullable) PINRemoteImageManagerImageCompletion completionBlock; 16 | @property (atomic, strong, nullable) PINRemoteImageManagerImageCompletion progressImageBlock; 17 | @property (atomic, strong, nullable) PINRemoteImageManagerProgressDownload progressDownloadBlock; 18 | @property (assign, readonly) CFTimeInterval requestTime; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageCallbacks.m: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageCallbacks.m 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/9/15. 6 | // 7 | // 8 | 9 | #import "PINRemoteImageCallbacks.h" 10 | 11 | @implementation PINRemoteImageCallbacks 12 | 13 | - (instancetype)init 14 | { 15 | if (self = [super init]) { 16 | _requestTime = CACurrentMediaTime(); 17 | } 18 | return self; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageManager+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageManager+Private.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 5/18/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #ifndef PINRemoteImageManager_Private_h 10 | #define PINRemoteImageManager_Private_h 11 | 12 | #import "PINRemoteImageDownloadQueue.h" 13 | 14 | typedef void (^PINRemoteImageManagerDataCompletion)(NSData *data, NSURLResponse *response, NSError *error); 15 | 16 | @interface PINRemoteImageManager (PrivateExtension) 17 | 18 | @property (nonatomic, strong, readonly) dispatch_queue_t callbackQueue; 19 | @property (nonatomic, strong, readonly) PINOperationQueue *concurrentOperationQueue; 20 | @property (nonatomic, strong, readonly) PINRemoteImageDownloadQueue *urlSessionTaskQueue; 21 | @property (nonatomic, strong, readonly) PINURLSessionManager *sessionManager; 22 | 23 | @property (nonatomic, readonly) NSArray *progressThresholds; 24 | @property (nonatomic, readonly) NSTimeInterval estimatedRemainingTimeThreshold; 25 | @property (nonatomic, readonly) BOOL shouldBlurProgressive; 26 | @property (nonatomic, readonly) CGSize maxProgressiveRenderSize; 27 | 28 | @end 29 | 30 | #endif /* PINRemoteImageManager_Private_h */ 31 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageMemoryContainer.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageMemoryContainer.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/17/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #import 12 | #import 13 | #import "PINRemoteLock.h" 14 | 15 | @class PINImage; 16 | 17 | @interface PINRemoteImageMemoryContainer : NSObject 18 | 19 | @property (nonatomic, strong) PINImage *image; 20 | @property (nonatomic, strong) NSData *data; 21 | @property (nonatomic, strong) PINRemoteLock *lock; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageMemoryContainer.m: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageMemoryContainer.m 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/17/16. 6 | // 7 | // 8 | 9 | #import "PINRemoteImageMemoryContainer.h" 10 | 11 | @implementation PINRemoteImageMemoryContainer 12 | 13 | - (instancetype)init 14 | { 15 | if (self = [super init]) { 16 | _lock = [[PINRemoteLock alloc] initWithName:@"PINRemoteImageMemoryContainer" lockType:PINRemoteLockTypeNonRecursive]; 17 | } 18 | return self; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageProcessorTask.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageProcessorTask.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/9/15. 6 | // 7 | // 8 | 9 | #import "PINRemoteImageTask.h" 10 | 11 | @interface PINRemoteImageProcessorTask : PINRemoteImageTask 12 | 13 | @property (nonatomic, strong, nullable) NSUUID *downloadTaskUUID; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteImageTask+Subclassing.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageTask+Subclassing.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 5/22/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import "PINRemoteImageTask.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface PINRemoteImageTask (Subclassing) 14 | 15 | - (NSMutableDictionary *)l_callbackBlocks; 16 | - (BOOL)l_cancelWithUUID:(NSUUID *)UUID; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteLock.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteLock.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/17/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | /** The type of lock, either recursive or non-recursive */ 12 | typedef NS_ENUM(NSUInteger, PINRemoteLockType) { 13 | /** A non-recursive version of the lock. The default. */ 14 | PINRemoteLockTypeNonRecursive = 0, 15 | /** A recursive version of the lock. More expensive. */ 16 | PINRemoteLockTypeRecursive, 17 | }; 18 | 19 | @interface PINRemoteLock : NSObject 20 | 21 | - (instancetype)initWithName:(NSString *)lockName lockType:(PINRemoteLockType)lockType NS_DESIGNATED_INITIALIZER; 22 | - (instancetype)initWithName:(NSString *)lockName; 23 | - (void)lockWithBlock:(dispatch_block_t)block; 24 | 25 | - (void)lock; 26 | - (void)unlock; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Source/Classes/PINRemoteWeakProxy.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteWeakProxy.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 4/24/18. 6 | // Copyright © 2018 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PINRemoteWeakProxy : NSProxy 12 | 13 | + (PINRemoteWeakProxy *)weakProxyWithTarget:(id)target; 14 | - (instancetype)initWithTarget:(id)target; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Source/Classes/PINResume.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINResume.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 3/10/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface PINResume : NSObject 14 | 15 | - (id)init NS_UNAVAILABLE; 16 | + (PINResume *)resumeData:(NSData *)resumeData ifRange:(NSString *)ifRange totalBytes:(long long)totalBytes; 17 | 18 | @property (nonatomic, strong, readonly) NSData *resumeData; 19 | @property (nonatomic, copy, readonly) NSString *ifRange; 20 | @property (nonatomic, assign, readonly) long long totalBytes; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/NSData+ImageDetectors.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+ImageDetectors.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 11/19/14. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @interface NSData (PINImageDetectors) 14 | 15 | - (BOOL)pin_isGIF; 16 | - (BOOL)pin_isAnimatedGIF; 17 | #if PIN_WEBP 18 | - (BOOL)pin_isWebP; 19 | - (BOOL)pin_isAnimatedWebP; 20 | #endif 21 | #if PIN_APNG 22 | - (BOOL)pin_isAPNG; 23 | #endif 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/NSHTTPURLResponse+MaxAge.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSHTTPURLResponse+MaxAge.h 3 | // 4 | // Created by Kevin Smith on 6/15/18. 5 | // 6 | // 7 | 8 | #import 9 | 10 | @interface NSHTTPURLResponse (MaxAge) 11 | 12 | - (NSNumber *)findMaxAge; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINAPNGAnimatedImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINAPNGAnimatedImage.h 3 | // PINRemoteImage 4 | // 5 | // Created by SAGESSE on 2020/2/28. 6 | // Copyright © 2020 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @interface PINAPNGAnimatedImage : PINAnimatedImage 14 | 15 | - (instancetype)init NS_UNAVAILABLE; 16 | - (instancetype)initWithAnimatedImageData:(NSData *)animatedImageData NS_DESIGNATED_INITIALIZER; 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINAlternateRepresentationProvider.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINAlternateRepresentationProvider.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 3/17/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @protocol PINRemoteImageManagerAlternateRepresentationProvider 14 | @required 15 | 16 | /** 17 | @discussion This method will be called with data off the wire or stored in the cache. Return an object to have it returned as the alternativeRepresentation object in the PINRemoteImageManagerResult. @warning this method can be called on the main thread, be careful of doing expensive work. 18 | */ 19 | - (id)alternateRepresentationWithData:(NSData *)data options:(PINRemoteImageManagerDownloadOptions)options; 20 | 21 | @end 22 | 23 | @interface PINAlternateRepresentationProvider : NSObject 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINAnimatedImageView+PINRemoteImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINAnimatedImageView+PINRemoteImage.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 4/19/18. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | @interface PINAnimatedImageView (PINRemoteImage) 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINAnimatedImageView.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINAnimatedImageView.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 4/17/18. 6 | // 7 | 8 | #import 9 | 10 | #if PIN_TARGET_IOS 11 | #import 12 | #elif PIN_TARGET_MAC 13 | #import 14 | #endif 15 | 16 | #import 17 | 18 | @interface PINAnimatedImageView : PINImageView 19 | 20 | - (nonnull instancetype)initWithAnimatedImage:(nonnull PINCachedAnimatedImage *)animatedImage NS_DESIGNATED_INITIALIZER; 21 | - (nonnull instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER; 22 | - (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; 23 | 24 | @property (nullable, nonatomic, strong) PINCachedAnimatedImage *animatedImage; 25 | @property (nullable, nonatomic, strong) NSString *animatedImageRunLoopMode; 26 | @property (nonatomic, assign, getter=isPlaybackPaused) BOOL playbackPaused; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINButton+PINRemoteImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+PINRemoteImage.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 8/18/14. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #if PIN_TARGET_IOS 12 | #import 13 | #elif PIN_TARGET_MAC 14 | #import 15 | #endif 16 | 17 | #import 18 | #import 19 | 20 | @interface PINButton (PINRemoteImage) 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINCache+PINRemoteImageCaching.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINCache+PINRemoteImageCaching.h 3 | // Pods 4 | // 5 | // Created by Aleksei Shevchenko on 7/28/16. 6 | // 7 | // 8 | 9 | #if !__has_include() 10 | #import "PINCache.h" 11 | #else 12 | #import 13 | #endif 14 | 15 | #import 16 | #import 17 | 18 | @interface PINCache (PINRemoteImageCaching) 19 | 20 | @end 21 | 22 | @interface PINRemoteImageManager (PINCache) 23 | 24 | @property (nonatomic, nullable, readonly) PINCache *pinCache; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINGIFAnimatedImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINGIFAnimatedImage.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 9/17/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | @interface PINGIFAnimatedImage : PINAnimatedImage 14 | 15 | - (instancetype)init NS_UNAVAILABLE; 16 | - (instancetype)initWithAnimatedImageData:(NSData *)animatedImageData NS_DESIGNATED_INITIALIZER; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINImage+ScaledImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+ScaledImage.h 3 | // Pods 4 | // 5 | // Created by Michael Schneider on 2/9/17. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #import 12 | 13 | #if PIN_TARGET_IOS 14 | #import 15 | #elif PIN_TARGET_MAC 16 | #import 17 | #endif 18 | 19 | @interface PINImage (PINScaledImage) 20 | 21 | - (PINImage *)pin_scaledImageForKey:(NSString *)key; 22 | + (PINImage *)pin_scaledImageForImage:(PINImage *)image withKey:(NSString *)key; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINImageView+PINRemoteImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+PINRemoteImage.h 3 | // Pods 4 | // 5 | // Created by Garrett Moon on 8/17/14. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #if PIN_TARGET_IOS 12 | #import 13 | #elif PIN_TARGET_MAC 14 | #import 15 | #endif 16 | 17 | #import 18 | #import 19 | 20 | @interface PINImageView (PINRemoteImage) 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINRemoteImageDataConvertible.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRemoteImageDataConvertible.h 3 | // PINRemoteImage 4 | // 5 | // Created by Andy Finnell on 5/23/24. 6 | // Copyright © 2024 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | Protocol for describing a class that convert into image data. 13 | */ 14 | @protocol PINRemoteImageDataConvertible 15 | 16 | @property (nonatomic, readonly) NSData *data; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINRequestRetryStrategy.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINRequestRetryStrategy.h 3 | // Pods 4 | // 5 | // Created by Hovhannes Safaryan on 9/24/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | /* 12 | Decide whether request should be retried based on the error. 13 | **/ 14 | 15 | @protocol PINRequestRetryStrategy 16 | 17 | - (BOOL)shouldRetryWithError:(NSError *)error; 18 | - (int)nextDelay; 19 | - (void)incrementRetryCount; 20 | - (int)numberOfRetries; 21 | 22 | @end 23 | 24 | @interface PINRequestExponentialRetryStrategy : NSObject 25 | 26 | - (instancetype)initWithRetryMaxCount:(int)retryMaxCount delayBase:(int)delayBase; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Source/Classes/include/PINRemoteImage/PINWebPAnimatedImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINWebPAnimatedImage.h 3 | // PINRemoteImage 4 | // 5 | // Created by Garrett Moon on 9/14/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | #import 13 | 14 | @interface PINWebPAnimatedImage : PINAnimatedImage 15 | 16 | - (instancetype)init NS_UNAVAILABLE; 17 | - (instancetype)initWithAnimatedImageData:(NSData *)animatedImageData NS_DESIGNATED_INITIALIZER; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Source/PINRemoteImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module PINRemoteImage { 2 | umbrella header "PINRemoteImage.h" 3 | 4 | textual header "PINRemoteImageMacros.h" 5 | header "PINAnimatedImageView+PINRemoteImage.h" 6 | header "PINButton+PINRemoteImage.h" 7 | header "PINImageView+PINRemoteImage.h" 8 | 9 | export * 10 | module * { export * } 11 | } 12 | -------------------------------------------------------------------------------- /Source/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyTrackingDomains 8 | 9 | NSPrivacyCollectedDataTypes 10 | 11 | NSPrivacyAccessedAPITypes 12 | 13 | 14 | NSPrivacyAccessedAPIType 15 | NSPrivacyAccessedAPICategoryUserDefaults 16 | NSPrivacyAccessedAPITypeReasons 17 | 18 | C56D.1 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tests/Media.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/Media.xcassets/DynamicImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Light.png", 5 | "idiom" : "universal" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "dark" 12 | } 13 | ], 14 | "filename" : "Dark.png", 15 | "idiom" : "universal" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Tests/Media.xcassets/DynamicImage.imageset/Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Tests/Media.xcassets/DynamicImage.imageset/Dark.png -------------------------------------------------------------------------------- /Tests/Media.xcassets/DynamicImage.imageset/Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Tests/Media.xcassets/DynamicImage.imageset/Light.png -------------------------------------------------------------------------------- /Tests/NSDate+PINCacheTests.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | NS_ASSUME_NONNULL_BEGIN 4 | 5 | @interface NSDate (PINCacheTests) 6 | 7 | /** Swizzles +[NSDate date] to always return the specified date. */ 8 | + (void)startMockingDateWithDate:(NSDate *)date; 9 | 10 | /** Stops swizzling +[NSDate date] and returns to original implementation */ 11 | + (void)stopMockingDate; 12 | 13 | @end 14 | 15 | NS_ASSUME_NONNULL_END 16 | -------------------------------------------------------------------------------- /Tests/PINAnimatedImage+PINAnimatedImageTesting.h: -------------------------------------------------------------------------------- 1 | // 2 | // PINAnimatedImage+PINAnimatedImageTesting.h 3 | // PINRemoteImageTests 4 | // 5 | // Created by Garrett Moon on 10/16/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface PINAnimatedImage (PINAnimatedImageTesting) 13 | 14 | + (NSUInteger)greatestCommonDivisorOfA:(NSUInteger)a andB:(NSUInteger)b; 15 | 16 | @end 17 | 18 | @interface PINAnimatedImageView (PINAnimatedImageViewTesting) 19 | 20 | - (NSUInteger)frameIndexAtPlayHeadPosition:(CFTimeInterval)playHead; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Tests/PINAnimatedImage+PINAnimatedImageTesting.m: -------------------------------------------------------------------------------- 1 | // 2 | // PINAnimatedImage+PINAnimatedImageTesting.m 3 | // PINRemoteImageTests 4 | // 5 | // Created by Garrett Moon on 10/16/17. 6 | // Copyright © 2017 Pinterest. All rights reserved. 7 | // 8 | 9 | #import "PINAnimatedImage+PINAnimatedImageTesting.h" 10 | -------------------------------------------------------------------------------- /Tests/PINRemoteImageTests-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "PINAnimatedImage+PINAnimatedImageTesting.h" 6 | #import "TestAnimatedImage.h" 7 | -------------------------------------------------------------------------------- /Tests/TestAnimatedImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // TestAnimatedImage.h 3 | // PINRemoteImage 4 | // 5 | // Created by Greg Bolsinga on 3/10/20. 6 | // Copyright © 2020 Pinterest. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface TestAnimatedImage : NSObject 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Tests/TestAnimatedImage.m: -------------------------------------------------------------------------------- 1 | // 2 | // TestAnimatedImage.m 3 | // PINRemoteImage 4 | // 5 | // Created by Greg Bolsinga on 3/10/20. 6 | // Copyright © 2020 Pinterest. All rights reserved. 7 | // 8 | 9 | #import "TestAnimatedImage.h" 10 | 11 | @implementation TestAnimatedImage 12 | 13 | @synthesize bytesPerFrame; 14 | 15 | @synthesize data; 16 | 17 | @synthesize error; 18 | 19 | @synthesize frameCount; 20 | 21 | @synthesize frameInterval; 22 | 23 | @synthesize height; 24 | 25 | @synthesize loopCount; 26 | 27 | @synthesize totalDuration; 28 | 29 | @synthesize width; 30 | 31 | - (CFTimeInterval)durationAtIndex:(NSUInteger)index { 32 | return 0; 33 | } 34 | 35 | - (nullable CGImageRef)imageAtIndex:(NSUInteger)index cacheProvider:(nullable id)cacheProvider { 36 | return nil; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Tests/fireworks.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/Tests/fireworks.gif -------------------------------------------------------------------------------- /build_docs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | appledoc \ 4 | --company-id com.pinterest \ 5 | --project-name PINRemoteImage \ 6 | --project-company Pinterest \ 7 | --project-version 1.0 \ 8 | --docset-bundle-id %COMPANYID.%PROJECTID \ 9 | --docset-bundle-name "%PROJECT %VERSION" \ 10 | --docset-bundle-filename %COMPANYID.%PROJECTID-%VERSIONID.docset \ 11 | --ignore "*.m" \ 12 | --ignore "Assets" \ 13 | --no-repeat-first-par \ 14 | --explicit-crossref \ 15 | --clean-output \ 16 | --keep-intermediate-files \ 17 | --output ./docs \ 18 | Pod 19 | 20 | mv docs/docset docs/com.pinterest.PINRemoteImage-1.0.docset 21 | rm docs/docset-installed.txt 22 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleIdentifier 8 | com.pinterest.PINRemoteImage 9 | CFBundleName 10 | PINRemoteImage 1.0 11 | CFBundleShortVersionString 12 | 1.0 13 | CFBundleVersion 14 | 1.0 15 | 16 | 17 | 18 | 19 | DocSetFeedName 20 | PINRemoteImage Documentation 21 | 22 | DocSetMinimumXcodeVersion 23 | 3.0 24 | 25 | DashDocSetFamily 26 | appledoc 27 | DocSetPublisherIdentifier 28 | com.pinterest.documentation 29 | DocSetPublisherName 30 | Pinterest 31 | NSHumanReadableCopyright 32 | Copyright © 2016 Pinterest. All rights reserved. 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/button_bar_background.png -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/disclosure.png -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/disclosure_open.png -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/library_background.png -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Documents/img/title_background.png -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Tokens14.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Tokens15.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Tokens16.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Tokens17.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/Tokens3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | //apple_ref/occ/cl/PINRemoteImageCategoryManager 7 | PINRemoteImageCategoryManager is a class that handles subclassing image display classes. PINImage+PINRemoteImage, UIButton+PINRemoteImage, etc, all delegate their work to this class. If you'd like to create a category to display an image on a view, you should mimic one of the above categories. 8 | PINRemoteImageCategoryManager.h 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.dsidx-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.dsidx-shm -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.dsidx-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.dsidx-wal -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.mom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.mom -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.skidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.skidx -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.toc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.toc -------------------------------------------------------------------------------- /docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.tokencache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/com.pinterest.PINRemoteImage-1.0.docset/Contents/Resources/docSet.tokencache -------------------------------------------------------------------------------- /docs/html/css/scss/_index.scss: -------------------------------------------------------------------------------- 1 | .index-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | 6 | @media (max-width: $mobile-max-width) { 7 | flex-direction: column; 8 | } 9 | 10 | .index-column { 11 | flex: 1 1 33%; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/html/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | body { 3 | background: #fff; 4 | padding: 8px; 5 | } 6 | 7 | header { 8 | position: static; 9 | background: #fff; 10 | color: #000; 11 | } 12 | 13 | aside { 14 | display: none; 15 | } 16 | 17 | .container { 18 | max-width: none; 19 | padding: 0; 20 | } 21 | 22 | article { 23 | margin-top: 0; 24 | 25 | #content { 26 | border: 0; 27 | background: #fff; 28 | padding: 15px 0 0 0; 29 | 30 | .title { 31 | margin-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | .method-info { 38 | &, & .pointy-thing { 39 | background: #fff; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /docs/html/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; 2 | $code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; 3 | 4 | $body-background: #f2f2f2; 5 | $content-background: #fff; 6 | $content-border: #e9e9e9; 7 | $tint-color: #08c; 8 | $object-background: #f9f9f9; 9 | $object-border: #e9e9e9; 10 | 11 | $mobile-max-width: 650px; 12 | -------------------------------------------------------------------------------- /docs/html/css/scss/_xcode.scss: -------------------------------------------------------------------------------- 1 | .xcode { 2 | header, aside { 3 | display: none; 4 | } 5 | 6 | .container { 7 | padding: 0; 8 | } 9 | 10 | article { 11 | margin-top: 0; 12 | 13 | #content { 14 | border: 0; 15 | margin: 0; 16 | } 17 | } 18 | 19 | .method-info { 20 | &, .section-method.hide & { 21 | max-height: auto; 22 | overflow: visible; 23 | 24 | &.hiding { 25 | display: block; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /docs/html/css/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import "variables", "normalize", "layout", "index", "object", "print", "xcode"; 2 | -------------------------------------------------------------------------------- /docs/html/img/button_bar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/html/img/button_bar_background.png -------------------------------------------------------------------------------- /docs/html/img/disclosure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/html/img/disclosure.png -------------------------------------------------------------------------------- /docs/html/img/disclosure_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/html/img/disclosure_open.png -------------------------------------------------------------------------------- /docs/html/img/library_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/html/img/library_background.png -------------------------------------------------------------------------------- /docs/html/img/title_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/docs/html/img/title_background.png -------------------------------------------------------------------------------- /progressive.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pinterest/PINRemoteImage/26818dc4ad9ca5ce3064e23524c4ac06e873076b/progressive.gif --------------------------------------------------------------------------------