Commit a2923d259ba809174dabcd61758bfe92de317426
1 parent
ca5150a0
3.1.2
Showing
80 changed files
with
1677 additions
and
3349 deletions
Example/Podfile
Example/Podfile.lock
| 1 | 1 | PODS: |
| 2 | - - SDWebImage (5.8.4): | |
| 3 | - - SDWebImage/Core (= 5.8.4) | |
| 4 | - - SDWebImage/Core (5.8.4) | |
| 5 | - - YBImageBrowser_DSCnliveShop (3.1.0): | |
| 6 | - - SDWebImage | |
| 2 | + - SDWebImage (5.2.5): | |
| 3 | + - SDWebImage/Core (= 5.2.5) | |
| 4 | + - SDWebImage/Core (5.2.5) | |
| 5 | + - YBImageBrowser_DSCnliveShop (3.1.2): | |
| 6 | + - SDWebImage (~> 5.2.3) | |
| 7 | 7 | - YYKit |
| 8 | 8 | - YYKit (1.0.9): |
| 9 | 9 | - YYKit/no-arc (= 1.0.9) |
| 10 | 10 | - YYKit/no-arc (1.0.9) |
| 11 | 11 | |
| 12 | 12 | DEPENDENCIES: |
| 13 | - - SDWebImage | |
| 13 | + - SDWebImage (~> 5.2.3) | |
| 14 | 14 | - YBImageBrowser_DSCnliveShop (from `../`) |
| 15 | 15 | - YYKit |
| 16 | 16 | |
| ... | ... | @@ -24,10 +24,10 @@ EXTERNAL SOURCES: |
| 24 | 24 | :path: "../" |
| 25 | 25 | |
| 26 | 26 | SPEC CHECKSUMS: |
| 27 | - SDWebImage: cf6922231e95550934da2ada0f20f2becf2ceba9 | |
| 28 | - YBImageBrowser_DSCnliveShop: beca1a333282098979595a7eae0a73a4805d14a5 | |
| 27 | + SDWebImage: 4eabf2fa6695c95c47724214417a9c036c965e4a | |
| 28 | + YBImageBrowser_DSCnliveShop: 0c757771a976328769463a9a55e43957030941c5 | |
| 29 | 29 | YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7 |
| 30 | 30 | |
| 31 | -PODFILE CHECKSUM: 1c9382532bba4c074f5c669a65132a33e0cc5171 | |
| 31 | +PODFILE CHECKSUM: 634c1354f9225a9c3712a8a331ac1d0e0476a483 | |
| 32 | 32 | |
| 33 | 33 | COCOAPODS: 1.9.1 | ... | ... |
Example/Pods/Local Podspecs/YBImageBrowser_DSCnliveShop.podspec.json
| 1 | 1 | { |
| 2 | 2 | "name": "YBImageBrowser_DSCnliveShop", |
| 3 | - "version": "3.1.0", | |
| 3 | + "version": "3.1.2", | |
| 4 | 4 | "summary": "YBImageBrowser改依赖为YYKit", |
| 5 | 5 | "homepage": "http://bj.gitlab.cnlive.com/DSIOSTeam", |
| 6 | 6 | "authors": { |
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | "license": "MIT", |
| 10 | 10 | "source": { |
| 11 | 11 | "git": "http://bj.gitlab.cnlive.com/DSIOSTeam/YBImageBrowser_DSCnliveShop.git", |
| 12 | - "tag": "3.1.0" | |
| 12 | + "tag": "3.1.2" | |
| 13 | 13 | }, |
| 14 | 14 | "platforms": { |
| 15 | 15 | "ios": "9.0" |
| ... | ... | @@ -21,7 +21,7 @@ |
| 21 | 21 | ], |
| 22 | 22 | "dependencies": { |
| 23 | 23 | "SDWebImage": [ |
| 24 | - | |
| 24 | + "~>5.2.3" | |
| 25 | 25 | ], |
| 26 | 26 | "YYKit": [ |
| 27 | 27 | ... | ... |
Example/Pods/Manifest.lock
| 1 | 1 | PODS: |
| 2 | - - SDWebImage (5.8.4): | |
| 3 | - - SDWebImage/Core (= 5.8.4) | |
| 4 | - - SDWebImage/Core (5.8.4) | |
| 5 | - - YBImageBrowser_DSCnliveShop (3.1.0): | |
| 6 | - - SDWebImage | |
| 2 | + - SDWebImage (5.2.5): | |
| 3 | + - SDWebImage/Core (= 5.2.5) | |
| 4 | + - SDWebImage/Core (5.2.5) | |
| 5 | + - YBImageBrowser_DSCnliveShop (3.1.2): | |
| 6 | + - SDWebImage (~> 5.2.3) | |
| 7 | 7 | - YYKit |
| 8 | 8 | - YYKit (1.0.9): |
| 9 | 9 | - YYKit/no-arc (= 1.0.9) |
| 10 | 10 | - YYKit/no-arc (1.0.9) |
| 11 | 11 | |
| 12 | 12 | DEPENDENCIES: |
| 13 | - - SDWebImage | |
| 13 | + - SDWebImage (~> 5.2.3) | |
| 14 | 14 | - YBImageBrowser_DSCnliveShop (from `../`) |
| 15 | 15 | - YYKit |
| 16 | 16 | |
| ... | ... | @@ -24,10 +24,10 @@ EXTERNAL SOURCES: |
| 24 | 24 | :path: "../" |
| 25 | 25 | |
| 26 | 26 | SPEC CHECKSUMS: |
| 27 | - SDWebImage: cf6922231e95550934da2ada0f20f2becf2ceba9 | |
| 28 | - YBImageBrowser_DSCnliveShop: beca1a333282098979595a7eae0a73a4805d14a5 | |
| 27 | + SDWebImage: 4eabf2fa6695c95c47724214417a9c036c965e4a | |
| 28 | + YBImageBrowser_DSCnliveShop: 0c757771a976328769463a9a55e43957030941c5 | |
| 29 | 29 | YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7 |
| 30 | 30 | |
| 31 | -PODFILE CHECKSUM: 1c9382532bba4c074f5c669a65132a33e0cc5171 | |
| 31 | +PODFILE CHECKSUM: 634c1354f9225a9c3712a8a331ac1d0e0476a483 | |
| 32 | 32 | |
| 33 | 33 | COCOAPODS: 1.9.1 | ... | ... |
Example/Pods/Pods.xcodeproj/project.pbxproj
| ... | ... | @@ -8,71 +8,65 @@ |
| 8 | 8 | |
| 9 | 9 | /* Begin PBXBuildFile section */ |
| 10 | 10 | 0060D0002F5404112A217929E462A1E3 /* NSString+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = FD46990B6EBC034765E7F896D7692AF0 /* NSString+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 11 | - 010A21434427A1E7CE25060BA3A66A61 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 618EA55D0CE2B6CFE74715E49A256295 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 12 | - 013FB3424E97C9CBA093B58F3FF74537 /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D239E8639A886939B6B5EB58FC27342 /* SDImageLoadersManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 13 | 11 | 0272570CDAD7111506606BBA6F85A080 /* NSDictionary+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = ACDDD031AB39EE10A73CBCA382968C97 /* NSDictionary+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 14 | 12 | 029C5740548FC68443365660D8ABA6F9 /* UIColor+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2058F8BF3995BDEFE75215FA94771AA0 /* UIColor+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 15 | - 02A4C8ABD5DCC501DE7A6CE19B398E14 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 968801418C5808212099C7AAECFD942F /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 16 | - 02B6598C52131C10E3CA344FB49B87FA /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 060133C4A0CD84D7E43EA5A6AE35A7BA /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 17 | 13 | 02C881CC8FD4159AA03D68B194FD365B /* YYAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = DEAEE433C1A4AC2340AD30180CD833DE /* YYAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 18 | - 033813F58E3D20FA511AF1B5C3D58FA7 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 64D193C84163B92004E21BE9A8A13B71 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 19 | 14 | 048D7570F580B28F3DF0FC0B2AA930EF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */; }; |
| 20 | 15 | 04ADC5DD2971F1A73C00ADF4C40439EB /* YYTextContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 666CEBB485FC6B4BC1861FC6F4EE5093 /* YYTextContainerView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 16 | + 06012BECF3390F6D209D81ABC29DEE7F /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 03917DDCF8C121DD56B0AD9B603C2B9D /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 21 | 17 | 0678C6B089EDAAEBF0ABD11243A753A3 /* YYDispatchQueuePool.h in Headers */ = {isa = PBXBuildFile; fileRef = E467579343CF6E084F5AF44750D3B054 /* YYDispatchQueuePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 18 | + 06EF6A665BCC7FDFD85BD8ABD55A3959 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4532E0D4D1C1FCB630416F347E791110 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 22 | 19 | 0751F49015B77B3FB215DB3AD60A231D /* YBIBCopywriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 33DBCD81CD9E79FBDBDD1041BC653A17 /* YBIBCopywriter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 23 | 20 | 0755CF3A071367BA31851EB62D5B2A60 /* NSObject+YYModel.h in Headers */ = {isa = PBXBuildFile; fileRef = FC399F5E175605828984C7E67A02DD73 /* NSObject+YYModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 21 | + 07ECBE230ADCE64A5E565EAC5608FE06 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E9E88F1E31A013B69A717855A9A782E /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 24 | 22 | 083BF8C20CE1E1F3773EE3C5536D0B0C /* YBIBImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 97A38E03511200872A6CE102D312DA97 /* YBIBImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 23 | + 0897E820C9A330AEE938549F3A202047 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C6338E013B6CE8A040D3B94EC208F53 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 24 | + 09291E0580080AF730970F2DE20C6F2F /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FB82601936A52D10C46ABDED4C4D68E /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 25 | 25 | 098E4E9C697F092846351BE92E971CCB /* YYDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 95F7B5AB059394D73D87262D3556EB78 /* YYDiskCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 26 | - 09EB95CBDF8D54EB05C26A5196EBBB65 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = CD970A6F82F507060C225F86F7A3F410 /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 26 | + 0A12ECF7CCD9D053812435656179FE07 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE818633CBD870C5763EC5A7DEEFEBB /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 27 | 27 | 0A29B5E3535A71017ED3189727F50C85 /* YYThreadSafeDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F091181C07B3942FF0C12310A2FD678 /* YYThreadSafeDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 28 | 28 | 0C2C51B9FDB2D20A15B32D15242BFBEA /* YBIBCellProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = A483F09FE887E66A6F02B7FCBE79F846 /* YBIBCellProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 29 | 29 | 0CCE71ACEC301683C4A76B510BF57603 /* YBIBTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 96371E9C734320A546704E45E02ED3DE /* YBIBTopView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 30 | - 0CD7B135FD4B84BDB1FB8727A2F85550 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DF00E591E4B26D6D1D35456AAE90B1C1 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 31 | 30 | 0D11DEFCE2724FE3C96AC4EE40F55DDF /* YBIBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B794942CBB5B6C0D1CF9F241EB18B3C /* YBIBUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 32 | 31 | 0E1842A4AB5D622772AEB9F4B6287A8D /* YYImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 563F4DAD613D6C00571FC9D44766124D /* YYImageCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 33 | 32 | 0E5602930F727902D8CBC2F207D498D4 /* YBIBToolViewHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A1341A583321F6A80299E2B2D53093F0 /* YBIBToolViewHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 34 | 33 | 0F1D2464A4C6139BB34E7B6E6E39023B /* NSObject+YYAddForKVO.m in Sources */ = {isa = PBXBuildFile; fileRef = E1EF95E26F5A8BC0AD3CEC7DE8D50611 /* NSObject+YYAddForKVO.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 35 | 34 | 0F4E5CD38D18F2E3E75AC64F03934E98 /* YYKitMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = AC5675312A245FA26DAC5D3DA60C6060 /* YYKitMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 36 | 35 | 0FC30F9DC8F64DC4B502B719869ED79C /* YYTextUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B335348A63303EE2CF47F0FB10EC9122 /* YYTextUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 37 | - 104CBAC9F34C7B8475A096C4B0ACA3A0 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C17D860CA95052284F7C9198001DC9 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 38 | - 1201437E196032353D4D2B2DF8206775 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C2170C0DA7F6751732A3F6F2D3304C /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 36 | + 11631B3F15728204C488D6CF17DA63BF /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF0A0D18F37DBE6D852FCEA2251F1C1 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 39 | 37 | 122BD5442BBECACB54A06747DED37B0F /* YYWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FC526297A9617C4BE9A6F090BD02A7EC /* YYWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 40 | 38 | 1238CAAE4120F0A66FDD66BC8ECA2418 /* YYWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = FDAB2149ED799695566D25A14612AFD4 /* YYWeakProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 41 | - 12A76A691E704E6EBE12CC888639C31A /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EF282CB27CB176AE4D81EB193162E61C /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 42 | - 1367682CED02F22D43F248A0E36CC17B /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EB5FC7AFB1E5240D21A6FE7DF89E87C /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 39 | + 130C29DD67F0DACDAA2E6A57DA2422D7 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8872339E7C6C556DCFC2B144D97747 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 43 | 40 | 137968123E34895CA083FE3FE12F8F57 /* YYAsyncLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = A297B0A3BB16024B6497BE64883F91E7 /* YYAsyncLayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 41 | + 13B7C26AFEF7B9A9BB71D6340836C1D2 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B758940E94222028625182D6DD5C48 /* NSButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 44 | 42 | 14958A9E9713112DA8B0BDD453321168 /* YYTextSelectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BB872492D04CC4C2B83ACB1537BCB51 /* YYTextSelectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 45 | - 14C2D66D5EC7A892325562A7830E78D4 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 608E04456BC00743986E00E4A8181EA3 /* NSBezierPath+SDRoundedCorners.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 46 | - 14E9103FD1B1EFBE7BA8EE1137810EB2 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA5120287BD232F4C4CECF7D74E0104 /* SDImageCachesManagerOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 47 | - 16B189FD50EB941DDBCEF3718C511381 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5573ECAD013B67C3DCA80D7EFBDE031B /* UIView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 43 | + 16EBE72F21A776BA4F5FA1B43DA0D550 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DC9E6937FC0DCAFBFE9BC1CC778D6C9 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 48 | 44 | 16F21DD55C514011E36EDA191BC47CE3 /* YBIBCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 4600030B461C937CF76ADA334E8D6F1B /* YBIBCollectionViewLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 49 | - 183F84DC6D79A0F93AE6C13F2EDDDCD8 /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = F37753D5DA03467158CF8F3BFA52E460 /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 50 | 45 | 192CE67469A2B7BAD4691D712B2C9D13 /* YYMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF2E5796402740EB5340B609872DBEA /* YYMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 51 | - 198D45399940A52F6AD442B5F96A24A1 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 232C7410166470C58B9D7DD4BEE465D6 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 52 | - 19BA863C27D0A5BBD664CB1ABDA03238 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = C8D85332D2674E584830AC6CFE3141FE /* SDInternalMacros.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 53 | - 1A04C35F3E2D85CFCAFC9934EAC8E033 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DED8461605A23446E943D5B44AC07FB /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 46 | + 1A645DC3F75D98F78F685E7E8172E6C4 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = B93B5CB4F97B4C63233C9781D9074385 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 47 | + 1A696C66B1AD121F4D74F70046E722BE /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2240205CFBA63D171F27ED059DA17F /* SDImageIOAnimatedCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 54 | 48 | 1B3F4D1188B463D85D392E89DABCDE88 /* Pods-YBImageBrowser_DSCnliveShop_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4FF6780DBBE60AA8EAACC09BD33F72 /* Pods-YBImageBrowser_DSCnliveShop_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 55 | 49 | 1B529361E5652CD292D14F89C9D29ED3 /* UIGestureRecognizer+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A1D7FB30E0B1322F08017865D3AED6 /* UIGestureRecognizer+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 56 | 50 | 1B8FD7D8E9EDF9BBA7ACD5FB448BE517 /* UIButton+YYWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = E97D1AED9A06E626CDC89DE4248FA2DF /* UIButton+YYWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 57 | 51 | 1D457A5D62A3B26C40A0BF028086C923 /* YYAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BAC4F1096AC0661BCC97A1690D41356F /* YYAnimatedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 52 | + 1D8DC86B542A5C7B185D576593BFEF08 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EF4C3869889BF6E0FB48DB6D3E50C42B /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 58 | 53 | 204561FFAF8A0B7292A4045AFA3E6C96 /* NSThread+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2083BC9AABD59C97DC155E29DC3E9A9F /* NSThread+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 59 | - 21C120EDFCE3F1B685833EAE2F088998 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B17144987DDC3673503BAA63081322E /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 54 | + 21C54761AEC4B6FF8F628CF62503856C /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = C8CF816C63E5B6559556C778BE819AF4 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 60 | 55 | 22759285C81AA923E5863F79F180DBF7 /* YYWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B0715021BC19551B9A5D5CB2408E7E2B /* YYWebImageOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 61 | 56 | 2294C9BC0119442FE4F0EE31CCD819F7 /* UIControl+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = E20C5E35E7CBCF4496931DDD69C93799 /* UIControl+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 57 | + 22AC8168428AA91CEFCC4A1EE18C61A1 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A2C5A33CC842DF0109E16A40FED6D58 /* SDWebImageOptionsProcessor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 62 | 58 | 22DB5291728E37A7B7580BA838C1A746 /* UIDevice+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A25BC91CE33678DD088B666A283A44A /* UIDevice+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 63 | 59 | 24437A6D0EA45A0A7D4D93972E399050 /* YYThreadSafeDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 57EF9F7EACD9A4EA29C6C7519AC29E42 /* YYThreadSafeDictionary.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 64 | 60 | 24EE4728E0D8DCB91B7E600CD3618A99 /* CALayer+YYWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 586579D8B562F5F100F35D60CADAF40B /* CALayer+YYWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 65 | 61 | 258DB6DA0945B112C39132D5F2B71ECE /* YBIBVideoCell+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F48485AE0CAFC4B57A15BC09F76DF01F /* YBIBVideoCell+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 66 | - 271841B1A02A31A896499240CC233E7A /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D99CAD8BB03A1ED3ACC306DE0083743C /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 62 | + 27117846D36D17C67AD6B0BC49819C2E /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D82E5E2C22405F57D03467E23EA118F /* SDWebImageError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 67 | 63 | 271D732A36C08FBFA8BDDFF597300081 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E326D6F0395EE4BAE670CD855A8D0176 /* SystemConfiguration.framework */; }; |
| 68 | - 27E23C72CC1BAD100D8F8E52A77E0DED /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = FE71B363E5C4B1A08ED28F0F030C3610 /* SDAnimatedImageRep.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 69 | 64 | 27E9D86EE4DB53E0619552A3D32CC2C5 /* YBIBVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ED618A61344837183008AF1693E8716 /* YBIBVideoView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 70 | - 285BB197A61A0553905D872B6E4F6BA1 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = CF05C25EE17396B80BB50C70733D2421 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 71 | - 28B63809D42D68F3E44A2012695EC8E8 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D137AC86EF60C0DD4725A67DBED5F6EC /* SDAnimatedImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 72 | - 292DFB006819CC5C457430933E9DF2CC /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 54932F1D65D4CE3969AD7014585252E6 /* SDDeviceHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 65 | + 2987181816CE330B8D8C8011A163DED5 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD9BD14816B4B34D6B032B14FCBCD17 /* SDImageCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 73 | 66 | 299334502C7E8A552B093FA1252592E1 /* YBIBImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CA7D546D1F3F75461DF8423D2BF90D68 /* YBIBImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 74 | 67 | 2ACB60B84B7C79A7739A5B0E44D4C65D /* NSObject+YBImageBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DEA694BF89E27C54D37D6453687E87A /* NSObject+YBImageBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 75 | 68 | 2AF4B545058531DE31545B25783DD75D /* YBIBDataMediator.m in Sources */ = {isa = PBXBuildFile; fileRef = AFF0F50B5FE26ED59651D7C8D462D48E /* YBIBDataMediator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 69 | + 2BB48CC4F4CCB6ED239A7116C1399192 /* NSBezierPath+RoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 480531E7E6576BA8EBC67D80A2410524 /* NSBezierPath+RoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 76 | 70 | 2C74C620DEC4D8EF9E821945D942E42B /* YYTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABDD0D167F87048EDFBCF3A1E54B781 /* YYTextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 77 | 71 | 2C9826C18088A3500C545761C905F0F7 /* YYTextParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D27CB4C11DD858E2346FCDB108967EE5 /* YYTextParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 78 | 72 | 2E0043CD33920B9F3E512FFD04E64A5D /* UIDevice+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D83880B681055CB94822859FFC3C2B6 /* UIDevice+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| ... | ... | @@ -80,65 +74,63 @@ |
| 80 | 74 | 2FB2D48CEC9FA3F13FE4C8FB20322356 /* YYReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 784B89EF43D57599270D1491D222B2BF /* YYReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 81 | 75 | 2FF328BC76D267CD2BD2464A76F1BE7B /* YYGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = B3EE8BE60AF36139B6E231F4FA722917 /* YYGestureRecognizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 82 | 76 | 313A089C34F2ECEB35BC86470ADC5FE9 /* YBIBImageCell+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 268BFC97CAD611337B98EA380097C255 /* YBIBImageCell+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 77 | + 31486EEF2AE7067DC3FB4C41D8B06044 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = AD998B4EBF0CD700BD542833326015DB /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 78 | + 31C885C264ACBC869D0C15774FEEEE91 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B836409E7407CD373408BBEE6FB78A56 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 83 | 79 | 326ACB0AEC6F7BDDCD287D41EEB15F06 /* YBIBVideoData+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F5670120F17DFEC029094ABAC2358C59 /* YBIBVideoData+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 84 | 80 | 32E6EAEE45FAFBCC7363F8DA2D5ECE30 /* YYTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 29A3DA3355DD6482745F7763E549FDEC /* YYTimer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 85 | 81 | 33284B411935766A4D23A0AF0419392F /* YBIBVideoActionBar.h in Headers */ = {isa = PBXBuildFile; fileRef = ADE583D4B2310B6AB0833BF354A6DC60 /* YBIBVideoActionBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 82 | + 3402867F1DCE2F01EE152BE666D15391 /* SDImageHEICCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = E1824D23FFCDBDE557E8BCF4A5D1EB64 /* SDImageHEICCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 86 | 83 | 34B96FCCC06C1D11BC31E63DBDE184E7 /* YBIBVideoTopBar.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD89195E78715E8E03598ED048B1DB6 /* YBIBVideoTopBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 87 | - 34E8A42A4CD18CF55A1C5CBD1F222D71 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C7A36D864638BFBD8FEE3A451FAC9B3 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 88 | 84 | 34ED3A525719FD3EE9F2A7789D12D7D7 /* YYFileHash.h in Headers */ = {isa = PBXBuildFile; fileRef = B9AB8CA329AC9F81339A2A1B4F0266FE /* YYFileHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 89 | - 3526C8C7BD0C5256C819AEB8DE26BC80 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 61733D38B2BF61692321B0EAD6CE7AAC /* SDWebImage-dummy.m */; }; | |
| 90 | 85 | 35E986B3D2EF9589EDA6898E692750A1 /* UIGestureRecognizer+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = A182794A8F3D76711F0E02DA7FF03E94 /* UIGestureRecognizer+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 91 | 86 | 36B94DF1E7E7776212429AE5CF1456B6 /* YBIBOperateBrowserProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = AFB40C28BD8BD37F15B50CB7E6A20928 /* YBIBOperateBrowserProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 87 | + 3768A48148C1A559EFA6857AEE21499C /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A7213E5D815346B024AC2C78B59AE7E /* SDWebImageDownloaderRequestModifier.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 92 | 88 | 37E4FA1562451631BA152EDCB15710CF /* Pods-YBImageBrowser_DSCnliveShop_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F170A24D4E53C3C47A8CE99795457D6A /* Pods-YBImageBrowser_DSCnliveShop_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 93 | 89 | 384E30CBBBD2B4A155A989F32F982BEC /* YBImageBrowser_DSCnliveShop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C705108BAA5E0F79A36A255F671FD73C /* YBImageBrowser_DSCnliveShop-dummy.m */; }; |
| 94 | 90 | 3951BC1F545F8733CBFC8E36CD6EC461 /* YYThreadSafeArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F23CF51EA97FF806B2D6A43C0B0AD50 /* YYThreadSafeArray.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 95 | 91 | 398ECA87D5BDB9FAAC6424101D8C1DB3 /* YYImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 13FA3D010FCAB935A4C1E9CC535A7D28 /* YYImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 92 | + 3A717A936244852C7999DF2ACDD3EBA4 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7EB188DA7D4BC587FE249FF628B51C /* UIImage+ForceDecode.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 96 | 93 | 3B365E37B4FC771DA78CDE4C81E9ACC2 /* YBIBInteractionProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = EC297FCDA53117783E423EFCF34C4C6C /* YBIBInteractionProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 97 | 94 | 3B697DC46854D39C5E029789A7EB60CF /* NSNotificationCenter+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 39721DF1E2941C5B4B819BD85F2AA60E /* NSNotificationCenter+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 98 | - 3BAC7E6B28028F929677080D34286C9A /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 57001503938AEFE09B39A90CD56CF65A /* SDDisplayLink.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 95 | + 3B9737EB4BDEA61D7A6D7C2F83ADE16B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */; }; | |
| 99 | 96 | 3C1845A20677487130FEEB952FB3743C /* YYThreadSafeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = C95F8792B9A29FF9F37927E606871D5B /* YYThreadSafeArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 100 | 97 | 3CA5A2706484756D1BA83EFE6B50B63F /* YBIBSheetView.h in Headers */ = {isa = PBXBuildFile; fileRef = 13EFE3DD1D702D85B36FB7D106BC163F /* YBIBSheetView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 98 | + 3CBE3496D679F3CAC215C24E124CEF20 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AA629F1636B9E5C1E7779416F41894F /* SDImageLoader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 101 | 99 | 3CECF913D9FE0F03BD7228B4E1C9EF71 /* YBIBTopView.h in Headers */ = {isa = PBXBuildFile; fileRef = 01925082D3D68AFAC34FD497668DDF52 /* YBIBTopView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 102 | 100 | 3D05DA022EDD102E5514E769E47AE751 /* YYTextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = E30659E8DA748D0CF9EA5E88C15DA2DA /* YYTextInput.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 103 | - 3D269D2B6E70D5134F84F471FA897C1D /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 20421D13A41D462848F051647414A829 /* UIImage+ExtendedCacheData.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 104 | 101 | 3D454A471582F13942DB598AE5959B34 /* NSThread+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = FA31B22A4EC7CB38F40BE6C28871B56C /* NSThread+YYAdd.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 105 | - 3E404F1C1EF06355EBCAD17AAA6A7655 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6746DFA44B1641AE23A50377370530 /* NSImage+Compatibility.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 102 | + 3F1C17F8ED3A2719985697A88379D691 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F772E2006AB9FCF216A22126D6D46F /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 106 | 103 | 3F6CD94029B30B62256BEE04B742944E /* NSKeyedUnarchiver+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 09D461072FB1F94116B94C3D35ADC919 /* NSKeyedUnarchiver+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 107 | - 3FE529AB19EA206854B9668E508D927B /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F7D6860C305EDC74687492EDEFC2325 /* SDImageCachesManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 108 | 104 | 406944DED312A7E5BA1B0003EECEA947 /* NSTimer+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 96B1B4E18C7313B870A3AECA294EED03 /* NSTimer+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 109 | 105 | 40802954DE9E2C6E621F0A6C52ECF32A /* UIButton+YYWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D696C9B3DB7929040B3B11E0888CE4D6 /* UIButton+YYWebImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 110 | 106 | 40B5E49E3E7BA95180F22F1F19BC719C /* YBIBImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = CC069742328B0F99B589CD1E88042C72 /* YBIBImageData.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 111 | - 40DD3721BA61598A56ECF57BB1C45EE8 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = AF3424AF58293B7AECCBA5ADAE1E90EB /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 112 | 107 | 40F884DA82F3490D28EE4A18D067133D /* YBIBImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F95AF0A9B4FD11599AC907D5ED78047F /* YBIBImageCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 113 | 108 | 41CB6255FC0ABB5BBFAED4A0F704DD47 /* NSAttributedString+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C3520C09D1B40E7E268FF0D9C55D3A /* NSAttributedString+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 114 | - 41E823881385B837FA086E301CBBB87C /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD82D69E6F6CA677C0FD0DB1910BEEB /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 115 | - 42BB3098DC0E47748C6AD61A10575859 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C6064257443573B6B4428384FE55B429 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 116 | - 4458F0F06DDB8ED606F8089B51DE2857 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EADB1874F009D5810228B521E808F8C /* SDAnimatedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 117 | - 449AF3A1E1DEFBD47B2411DAD0E5D6CC /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B3FCC15992E25641767F7CD50BAA99 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 118 | - 44F7C039A4502CB6ABFE93BC1626ADAF /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 13211B603D4A4D4D2724F2C5BB4407D3 /* SDImageGraphics.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 109 | + 41D2B74D60CECB9A13273FEA70EB0853 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5820AFD9CB1F531DEEEA85AE53BA9FB1 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 110 | + 43367367332A88EC53B2BEA287BAA3DD /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = CF824EAADAAA9D61882AC1E95A4FAAC5 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 111 | + 43413AE961CEDF130DB347D12953F90F /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14AEC03CE74FA3C1ED22FD08ACDC489F /* SDImageCachesManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 119 | 112 | 450020EF80EE2190F959859B70A7200C /* NSNotificationCenter+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = ECF2A1D940AD2ABA3D907CE415109326 /* NSNotificationCenter+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 120 | - 451775744CDDD8A2805CCC5FAAE96FE6 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 36C8C2D7C7ACA9C26136F7A7D1154082 /* SDImageCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 121 | - 461394E1264BA539807AE22B6681037D /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C550536A6B0FFCC49930C911A1A845CA /* SDWebImageOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 122 | - 46E5579E12DEE8B0B0E8B4BD484303AF /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EA2BCD717BF8B6108E49F1344996DCF /* SDWebImageCacheSerializer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 123 | - 477600BAE7223A59EC2D341F7EAA0C5B /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1072A8A4B2B89ECA95DD401CFB50F108 /* SDImageAPNGCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 124 | - 47CFA5C583D7B3BFD0FBAD1F1A474913 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0DD7284FE8B0C78E070E9DA2D0C46E2 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 125 | 113 | 48021E999B1E5F973788B56CCA965E25 /* YYTextRunDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B1F78325C1CF3117C990E0DBB1443AC4 /* YYTextRunDelegate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 126 | 114 | 48229CDD5F7F0027AD9E4156B76F2761 /* YYTextLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E718C6C13FF741C9062C0F849A452F2 /* YYTextLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 127 | 115 | 4823FF271BD5BF673DC75142A9C9E387 /* UIScreen+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = B664849B9E38756422D4E0F139369652 /* UIScreen+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 128 | 116 | 4A0AF19D46BA2F0FD4AF851196B38EF2 /* YYSentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = 47EBB445DD9ED1E0006BD00439ED755A /* YYSentinel.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 117 | + 4A295CDE35C0C3A0C3BDC83BAEEBC8D1 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C7DA27208415129BC75A3AE0EC610D /* UIImage+Transform.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 129 | 118 | 4A5A8FC3C886ED3C64CED4D130FE0F03 /* YBIBDefaultWebImageMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 68D2A3CB6FA504A7585BD0C033C2860D /* YBIBDefaultWebImageMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 119 | + 4A63641D8EA2784EA3ED6DE31D3EEE7B /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 880ED7B5A8CB58EE4EE46F97AAFC7934 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 120 | + 4B010F01929654CD157576546C2CA5E5 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D4F696743A974B8507BEF6FB323BB62 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 130 | 121 | 4B3B7BFD84DD51A967904785A38307B7 /* YBIBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 101F73BF4899F419E3CC133F2A9180D4 /* YBIBContainerView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 131 | 122 | 4B8C95CC6A366A73C4F26F2448899292 /* YBIBLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = F0C1D31C0ED9EAF5880440E2214DFB67 /* YBIBLoadingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 132 | 123 | 4B993FDB4652EC183C92386AD8A826F4 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA809AC31169252E62703BD0FBD06EE5 /* AssetsLibrary.framework */; }; |
| 133 | 124 | 4DE3E72DC3D3D19FF35127E11FACFC2C /* NSData+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D09FF329509C51C099F07C2BA4EF7A6 /* NSData+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 134 | 125 | 4E113F880A8F4186232B79C088D5B228 /* YYTextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE5EE0D085B4C8EE2CDD27B25526D0D /* YYTextLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 135 | - 4F227430C16CAB3FF65A1488229BF46A /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E02A020962AA8A983BE9DEF489D5CC5 /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 126 | + 4E303A392C14264AF2A7846A47904C0E /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F679F8EE0717580BF2DF10529B314ED /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 127 | + 4E5C5A91108AA66D06C8D32C62266D23 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E907072812DC6E02160321606CBFFD2 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 136 | 128 | 4FB4BD99B28E8CFEA3F95747EF6CEF79 /* YBIBSentinel.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CCFEB0FA63FC0D2DCDF8E5B3E3CC33 /* YBIBSentinel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 129 | + 4FB58F2A627219E59C6002407BA17370 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C01AF8051358A2AD340A5AB3505F28 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 137 | 130 | 4FEFE33A7E35A2D1C37A49A938DEA3BF /* YBIBToolViewHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DF010552264134747196B93F7030F079 /* YBIBToolViewHandler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 138 | 131 | 511503F829FAA5EC9610F4443E3D2847 /* YYTextArchiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 9126743F263F9F3BED4DDDB5EFF3F2C8 /* YYTextArchiver.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 139 | 132 | 5170A333176FE316425BF9199E723910 /* YYTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = B4632D2A423ADC26289A01B226F70E28 /* YYTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 140 | 133 | 517A0598B2C0EA7B8F5C74D34845F0D5 /* YYClassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FA14C2DEAB1ED0438F36B2AF930CC1 /* YYClassInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 141 | - 521A2AB2326986DDA7210B222799D82D /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 102A8609FE38B44A4F04554766133491 /* SDImageIOCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 142 | 134 | 52EB680BFBB3E4C3F09C36F423DF2CC8 /* YYDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 28231517D2EC4777AA0E1F8613912A64 /* YYDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 143 | 135 | 538760AA208FF206F3BF4156545C0AEC /* YBIBSheetView.m in Sources */ = {isa = PBXBuildFile; fileRef = A8AF070443791A87599C26E1E46E74B1 /* YBIBSheetView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 144 | 136 | 54B786B4C13CB1CF2A1D5BFA8E223872 /* YBImageBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7A2AD834B988AB862338A88298281712 /* YBImageBrowser.bundle */; }; |
| ... | ... | @@ -146,23 +138,23 @@ |
| 146 | 138 | 54F83939D254C814BD261C4F9067EE45 /* YYImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C805133F6D3AF69C8994E6375F7B7155 /* YYImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 147 | 139 | 54F962BB1E3633A8CE3CD524A2A091EC /* NSObject+YBImageBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1238AEB9DF5C8189A50C5E4E0B74DC2E /* NSObject+YBImageBrowser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 148 | 140 | 5551655EE581057624E66895BC5A99EF /* YYTextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4A7C95058000CD832DBF4537DCFBA4 /* YYTextLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 149 | - 561EAFCC4AA4A4FFA55319ACF371D31C /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ECDD31DCADBB91FE191C953267FFF2D /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 141 | + 55F81E8A4E05DCEA1424C070100D7A08 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0027B01676377B9218BE8AA537BDAA8A /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 150 | 142 | 565EE0410B39DE584B5CB1DC63FF74A9 /* YBIBDataMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 80A4A26F23AC2E0F4F5EBC0F4B53543D /* YBIBDataMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 151 | - 56D4C3BEBAF6D7B57123C4A919EDFC4D /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = D1A63106E180D500BA4681CBFF159C50 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 143 | + 56D932D22CCE25078DDC72863C793EB6 /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CA2F973E303B162092C59FA182AC2842 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 144 | + 571964893E54957A53F88749EA22E79B /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6076834A27CA897C42FFDA170BDE4715 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 152 | 145 | 572FF20566D47336C057266897DE4592 /* YBIBVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3378EC961A947D7584285C497BA5C833 /* YBIBVideoCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 153 | 146 | 57AA56BCB8A92A8D90C5BA695D8E8FC8 /* UIApplication+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 03021F927B254ED434510FB85A91E7DE /* UIApplication+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 154 | - 580A58EB2DC597145BE726FF15B7B980 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F204DC3ADE5CAA2617773E3A9EFDDBB /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 147 | + 584691DE6F6DC43CCB28E2164DDD65C5 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C0EBBBE53B935FF0453555166C8BD82 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 155 | 148 | 588A0B34308F4D28990E6B5C34B14E57 /* YYTextInput.h in Headers */ = {isa = PBXBuildFile; fileRef = E7A8CFE58CA45BE0CF414ED53D7E9831 /* YYTextInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 156 | - 5BCB8102AFF58BDD96E0C059F9B88BB5 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6016CD6764077B1F107BD22483AA7D14 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 157 | - 5C11EACACCF1A59EC89E212517D471D2 /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F73E603FC59F5282264218DA84C3E5B7 /* SDImageHEICCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 158 | - 5C5058FC446A9C6C4F3FA70C2121A267 /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = C43DE0B9900A2DBDABA15312032D955B /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 149 | + 5B6E86C662422D902876E9564F7D0D62 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = CCFF6195D3943C3B2EE93D641F705287 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 150 | + 5BB4DED775A9AB9259E214C9543F2409 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = AD9AD3087AA0C54D99784B1E96B8F385 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 159 | 151 | 5CE0FBC3853B89C290600C1D8FAA316D /* YBIBAuxiliaryViewHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 618A21680667BDF2F6B320EC659C0C8A /* YBIBAuxiliaryViewHandler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 160 | 152 | 5D2EAD73E6A402F5BFED5E1899810342 /* NSData+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = B63F966DDF9161A1C29525E49D01A94F /* NSData+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 153 | + 5D93304CCA386D1CA921179A22788088 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3977DF74625040A3E0128C656F9FA8D0 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 161 | 154 | 5DADAC8CF846B868BB1435BA03B14CB9 /* YBIBWebImageMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = E11C276295B8B9FBB66B8CFCEDD10534 /* YBIBWebImageMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 162 | 155 | 5E21A134F5D88BEDF281002DBB92E3F7 /* YYTextEffectWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = D12BADAA1C1EED1E8EFC4C3B586A68EF /* YYTextEffectWindow.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 163 | 156 | 5E2CDADC7CCD44D0C28AB2517341C12F /* MKAnnotationView+YYWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9505B72CDB9E287780696B552708241D /* MKAnnotationView+YYWebImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 164 | - 5E96F449788433CD16C308CA4C4974AB /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9915D39521761F821273ED4AD94F462B /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 165 | - 5EC0E24AEBC97BED8827D6824B20AEA3 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5566B7FA1592DB68F47F538060773A34 /* SDWebImageDownloaderDecryptor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 157 | + 5F7825DA2B38AE6F113742CD8640B6A5 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C0F853EDBA5EE0AFD5FF80DF4E069774 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 166 | 158 | 5FF823B0C133DC09A947E1EEA83AE787 /* YBImageBrowser+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 05B6665B0FCAC9FA4988670409B6B9EF /* YBImageBrowser+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 167 | 159 | 604E401B7BD596E58D52BD8C3439E285 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F0A032626FFA7C226DF55204CF32C5A /* CoreImage.framework */; }; |
| 168 | 160 | 608BA5B01D1787C25CE77E5A4B61010C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E1DF05D31C52BDD36D3C352B6D38143 /* MobileCoreServices.framework */; }; |
| ... | ... | @@ -170,124 +162,112 @@ |
| 170 | 162 | 613F0D98262025998DBC67A9DD29438C /* YYKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = E1789ACB2E0A630C9C7419690313D4BD /* YYKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 171 | 163 | 623635ED16355C8405DDCCEE7E014476 /* YBIBVideoView.h in Headers */ = {isa = PBXBuildFile; fileRef = ED78F9035D62E00668B4A848571B55C4 /* YBIBVideoView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 172 | 164 | 62EE7A80845DFDB75A9E1F0ABEE8A761 /* YYClassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F23B513D9D8F0D3A6E0802706EAAE0A0 /* YYClassInfo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 173 | - 64CB4C39356EDD005F3104B820F4B299 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = EFBE035B06C6B5FC5316B23AA385AEB7 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 165 | + 637C07DAF593E361026C13455CED3356 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7492D3D26ACA17BE066949BC5402EFA6 /* SDImageIOCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 166 | + 6419E84A00BD1CC2D89FBD11DBA95B35 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 95D767BEAA3A22D8C4B4F881F593EA55 /* SDAsyncBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 167 | + 642B272637AFE100C01566715BE9A90E /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 994DDB7514B65007DB23743EE9419955 /* SDAnimatedImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 174 | 168 | 64CE031D05AF0C7617076D3ADD88DCB8 /* YBIBImageLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 375D9DE1B1D8EB4B9968FB74F25DE792 /* YBIBImageLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 175 | - 64F3EB426774D6F1D593DBFAFFBF6791 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 467332BA4DF047A604E2AD170D2A9A6C /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 176 | - 66794E1E249B57756C75632B1CF7AA7A /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4423F2AF5E01BBBB5F27784F5DA57247 /* UIImage+ForceDecode.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 169 | + 66ABFE235C4A3EE1284E40B26EC06E50 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 26EEACAD4CFF038839E5CAE01FC51426 /* SDImageAssetManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 170 | + 66E7DB4A06FD62E3319504FA066A159D /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FBAFB1147F9F60F82F67F2F93767AEA8 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 177 | 171 | 66EEEC491B30074BACEFD2257033864B /* YBImageBrowser_DSCnliveShop-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30A5E7177537475E2A71D3D8A0E4C58F /* YBImageBrowser_DSCnliveShop-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 178 | 172 | 6711B19F0807169D6079C83D4BFDF7D2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 027369B6DC1B43C3102AE522A00B351F /* CoreGraphics.framework */; }; |
| 179 | 173 | 676B7D9D11B4F2687F9B296CC9950AA7 /* YYTextMagnifier.m in Sources */ = {isa = PBXBuildFile; fileRef = B436707B203DBCBB754448AF3071705A /* YYTextMagnifier.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 180 | 174 | 67992FD17748FE24783B25E1BF320274 /* YYLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = C183149AE26EC946A2F3DEA358713217 /* YYLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 181 | 175 | 68F3A40EADC0AF71E41CC70C36F6976E /* YYFrameImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 410FD0E1E2173C4AFCCB371FC6932374 /* YYFrameImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 182 | 176 | 696CD1B74C639EE917E0D2A956F50935 /* YYTextUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B5AA17CCA3C4553252CF80AEF70404A8 /* YYTextUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 183 | - 69979E7EF7E1322AF64B9D04EC5DC4FC /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 1249E97F29FD39E6B5CA9DD3D122921C /* SDImageCacheDefine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 184 | 177 | 69B6CA397711950A1FB1F7159D8C730D /* YBIBCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 09FA23E05944FF1B0AD4A1CAE80AE86E /* YBIBCollectionView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 185 | - 69FC796803AADF6F7D78E034F759E07A /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F25D99C7ED5F7ECE058950E756B815B /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 178 | + 69B78205FADBA6F82DD7D8842E744559 /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF96D9B286912D2041A6038E44BF9D78 /* SDWeakProxy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 186 | 179 | 6AFF36353F18609B9EBF04EEFFF0AB4B /* YBIBPhotoAlbumManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB2C18C7F7569D6D85619691655DB76 /* YBIBPhotoAlbumManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 187 | - 6B8E9A4250E31C61FFB2FA44B1ED587D /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF39D0D9A539DD852E83070D546838D /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 180 | + 6B841305B372900E43EAD6CF233EA695 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 397498F9C1EC4E17B000928E2E9A2551 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 188 | 181 | 6BACCB1BBF481BA828D7226094996218 /* UIBezierPath+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = AF18321586C240857382009824EBDB64 /* UIBezierPath+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 189 | 182 | 6C294CB68EBA0C3F43058CCA6D0629DF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */; }; |
| 183 | + 6C9E415ACF9DBBF5276A439ECA83FF41 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A3758E1F2262F48C18DEA44579E7F23 /* SDImageCodersManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 190 | 184 | 6DCEAB9BC2D35D749577C700151E76BE /* YYCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA7CBEA43C737A330D9608FE7806297 /* YYCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 191 | - 6F14B66A0031F8CD2DBD49D05F285A5A /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B374325A4827DE6AA8D86E8A4CA0C0E /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 192 | - 6F52C02EB7BEBB28BEF797764940E83D /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 115DF10AB89F4BD3959B0760E6FF7F5A /* SDImageTransformer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 185 | + 6E23CCE1DD2C5694FB3733EF5969C2BA /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 843DE7A9D5751B6D1E4B542142E88BE5 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 193 | 186 | 6FFF65E8EF55589DBF7739C2B3C0C408 /* YYTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9F42DE0F28AF77F3789C8BD0F8A78 /* YYTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 194 | 187 | 7100C768AE648D8FF211D24F285AF3F7 /* YYTextRunDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E1C94E51AFCA8ADEB14A14D7E5C910 /* YYTextRunDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 195 | - 71C055BCF544D98F47CCFB404A9157A0 /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DF0BE15112187DE13F59F20FD37196BF /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 196 | 188 | 71F103B56B2BE2EED9760CB429416EC9 /* NSArray+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = EF5D08601B4B637FF284E68A8EEC858C /* NSArray+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 189 | + 720BDB7561A9BF9FAA229655BF6BAACB /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A2EE608D10670E27D666BCB148BE76A8 /* SDImageCachesManagerOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 197 | 190 | 7239A93C05A719FEA5955CA08CACD819 /* NSBundle+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D073BDA908719B072B9A52BECCED3D /* NSBundle+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 198 | - 725C541DA4309D9A2CE04EA1BAC9DB05 /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB88B001512FB115B60C0A194FAB687 /* SDGraphicsImageRenderer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 199 | - 7320BE37CC5564C9200656A346D16D7C /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ECCFB33F5B2FAFCB9059F1EA4872AD5E /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 191 | + 7296ED68E239CF8323284C327EFD34DB /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FB1475C6AAE3E931553C57D2012437B /* SDWebImage-dummy.m */; }; | |
| 200 | 192 | 74A52BA6F30673465B7D46D9C0D589DF /* NSObject+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = FF1FC22A806424A9D295AA3C1785B496 /* NSObject+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 201 | - 758D45C8E630A9B2A29746AFAB257929 /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 885401F9AE5B59CB193871CFBB1551CC /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 202 | 193 | 75EFCC25F3AB66922773B08B40ACB930 /* YBIBImageCache+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 327DD14828A174C897406BB7ACBB30E7 /* YBIBImageCache+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 194 | + 765CF9D27014B63D63045C295D14D47F /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 106CDD63C990007C4EBED229576FD0E6 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 195 | + 768B0529984555456940B969FB3B0C5B /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B9F2CAB3EBC390CC9C5DF6FEB4AE54E /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 203 | 196 | 771B60C15778D6A1F7F9EBA03217C0FE /* YBIBSentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1FEAA05AC81F62B91CF98EA70351DD /* YBIBSentinel.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 204 | - 7829F86094FA530717C4AF09DFA1FCB7 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = A86C89F5D3FD68F631C6AAB3E9FFDB67 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 197 | + 773F599C7937832DC3E3C3F5FC41A2BF /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = E6AC77D76359DA3AB60BBECA32896CFA /* SDWebImageCacheSerializer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 205 | 198 | 783E03543353E623E739BE78A5929AF8 /* YBIBLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45819A3D4F8AF3FCF1D0D1AF84EADC51 /* YBIBLoadingView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 206 | 199 | 78425788741B147A8800D730F768DDC9 /* UITableView+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = DD5396322ED69A5415D1CCD0B6393CA3 /* UITableView+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 207 | 200 | 7854082241AE68119F337D38216F3C71 /* YBIBCopywriter.h in Headers */ = {isa = PBXBuildFile; fileRef = B693FD0CA179F7A03CC3787C32366CA7 /* YBIBCopywriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 208 | - 78A8F86E5996E580294B65E304C65F6A /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F3FA042CB9FEAE916F9354DD0FFDC410 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 201 | + 78C4797B83602657490272FB5AC87882 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 159B608142C5AD0E99E00479F64CDAFE /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 209 | 202 | 7906BC8879E295E9832A8668BEDAD6E9 /* YBIBDefaultWebImageMediator.m in Sources */ = {isa = PBXBuildFile; fileRef = 60FC5BFD7F334913232A59633DEE5138 /* YBIBDefaultWebImageMediator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 210 | - 79140F3DB1DFA9969EF7EA809862461B /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CA02462DD9F35B55FD8C20DC0A0CDBC /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 211 | - 7A39F3B62173880BC1A1E872B2B0DE19 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 7136C53C3E86DF97021DEAC46C3AF414 /* SDWebImageTransition.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 212 | - 7BDCFF16AD5094651DDF91E007A194A1 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 1780A6FB6896D6EE58CA176A32A91167 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 203 | + 7AA1932AD1AADADB7084C1120E353441 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = C343BEA71DA4406F27A27215550DB0CA /* SDWebImageIndicator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 204 | + 7BE352AC96A490424A89542C59B92D27 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2594CEE3269A686FE6A32ADF1ACDA903 /* SDAnimatedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 213 | 205 | 7BFB921FDAB6E3FE9ECDECF872C8E101 /* NSObject+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A650BD7991FDA4D59B763DC0B897B5 /* NSObject+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 214 | - 7C9BCCE2BE2AB0F74617E9638E8383E2 /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14EF33DBBD181973544221E30D2DC4B9 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 215 | - 7CB9508A6133F4674F3358339F62CF03 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 03A09A7D80E19CC940BE2323D0536D61 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 216 | 206 | 7D3C72B253473131AA5D6B75A4044A4D /* YYTextLine.m in Sources */ = {isa = PBXBuildFile; fileRef = CAF78B066BA4AA1500A5DFC15357B69A /* YYTextLine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 217 | 207 | 7E798DEF60E5AB2D32D36B2604826737 /* YBIBImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 849AFCF98DA4C75651F5D475A19348D0 /* YBIBImageCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 218 | - 7F47C6E48CDC5A9B788F8EB05D826BE6 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9EF0789AEFDBB03D69E8BF132003277 /* ImageIO.framework */; }; | |
| 219 | 208 | 7F779583472271986B6B9AFE3C708D20 /* CALayer+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAA1659DC5FA259CDDED68F436C2BF1 /* CALayer+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 209 | + 8095235275C7774DBD0439AEBF02EBF9 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DE3B8DDA43BF244A83FA3A8E49B9C4 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 220 | 210 | 8162CC737D0F996DB7986B1B89C50B29 /* NSParagraphStyle+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = 0501ADF2BFD7B3CD05199AEA120542A3 /* NSParagraphStyle+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 221 | - 826CC80A43888E4B01B8C0F546CCEB4C /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E6B26DB6EEA41E128F36B8CCD8BA6C90 /* SDAnimatedImagePlayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 222 | 211 | 82B7DA9954D4613DC589CF3A6D681E3A /* YBIBInteractionProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = AA0DFD4E17C227B014108A94D20370E6 /* YBIBInteractionProfile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 223 | 212 | 82F9FC32B8CEFF860D7AF3ED3D109D79 /* YBIBUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 33F8253486294181F468179983E49503 /* YBIBUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 224 | 213 | 831E7B86A0A02A8B9099B742E8B9F365 /* NSObject+YYAddForARC.h in Headers */ = {isa = PBXBuildFile; fileRef = E6549BAAE978C54E9943845A282B7887 /* NSObject+YYAddForARC.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 225 | - 84996105619FE8603B904EBD8CAF4650 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6206FBA44F9BD5BB69EB2338D24399 /* SDAnimatedImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 214 | + 83A3C38994C1BE0F1B3FDC74FF3EB86E /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 631A43488B8C087EA660030CD2484EA9 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 226 | 215 | 85433B42BB6C81E20A75F25805D4BCDB /* YYTextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C9EBF2F4721D7796CABB86E57141312 /* YYTextSelectionView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 227 | 216 | 856B3588D32C1F7B1F12D7EFEB3E6F0B /* YYCGUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C67FA1CF5455B750586F3E50B4AEE6B5 /* YYCGUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 228 | 217 | 858027A29B152077943E0A28CE622EB5 /* YYLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = B24C89AA8E69F17D8867CB8BAF8453DA /* YYLabel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 229 | - 858BA6CE212BDE681F7B8EC99CDEA5A2 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CE599BD66BC1D5DBF2513D84C9CF10D2 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 230 | 218 | 85B06803E42F5D23940D925E5B50BC20 /* CALayer+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 638CD74411415C9BD0B7940010462593 /* CALayer+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 231 | - 85B91AFDF4CF2F4FB54D35AE96CB02DE /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 12B66AB16766AB4060516E7814443E08 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 232 | - 86A92CFC75F685F5805824C81ED34DD9 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AEC717DE657C306DC4220359875899 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 233 | 219 | 86AA30BB751B23F8B7D87847A0D22CDC /* UIColor+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B392E50F95AAAED6E6AF60D7A6FBA53 /* UIColor+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 220 | + 873613A08846E4C11A3D0504EF738DD3 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C25A06B05CE4932A05E03D9A5B91E1A /* UIView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 234 | 221 | 8789F7B4DB1B1FB100F83B649A587A7E /* UIBarButtonItem+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E241CBBD2EF97B17ECA31FEAF181E7 /* UIBarButtonItem+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 235 | 222 | 87BA235C9033EB1E9BD42009504AF9EC /* YBIBIconManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD92986443124E1DCE997385B496FB7 /* YBIBIconManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 236 | 223 | 882B95F4DB08FE20F2326F2C36D7844A /* YBIBPhotoAlbumManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 14462A5B7907FCC9A6CC6EAD33842356 /* YBIBPhotoAlbumManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 237 | - 8860B7C942F4FDAC599E545DEC6E0446 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 657DCFEE5B399779371CC2AC2AAAA206 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 238 | 224 | 886F2D2210CE2308AA97C645044F692D /* UIBezierPath+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A08FF9357329D825160ABB1311027C9 /* UIBezierPath+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 239 | 225 | 8908C0789F324444C029342D5462093E /* YBImageBrowserVideo.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 78C427ED00AF6FA74B7F70468B7F9537 /* YBImageBrowserVideo.bundle */; }; |
| 240 | 226 | 890F7FAF9C784AFD91B418628C895EA5 /* UIFont+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A37969EF9EE0C673EADF254ACD0FE1C /* UIFont+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 241 | - 89A6805309AE158EA70271058AD04DAC /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC1A8B570BBF9B90CBC65027B601DEE /* SDImageIOAnimatedCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 242 | - 8A1D68B08A42906461750649F460B63E /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A788FE41CE72DC285C7E12274B2EEA45 /* SDImageCacheConfig.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 227 | + 89AA4B620BAF006802F7FE16331FBB03 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 85323CE74E87D9048ABFE6CB1D80BCB5 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 228 | + 8AAEE8B8F842102CB770F4A2C286AEE0 /* NSBezierPath+RoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = DFFBF564BC41F65FF3EF9F404A3FF8A5 /* NSBezierPath+RoundedCorners.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 243 | 229 | 8AE9809EDD831DD756AA7CE5682506C1 /* _YYWebImageSetter.h in Headers */ = {isa = PBXBuildFile; fileRef = A76D4662C854612618E547F25B4B90A5 /* _YYWebImageSetter.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 244 | - 8B74D26ECDC0A95EADFD2FE3D6044F45 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F30AC9537E6584F35D8DD4C10EDB7B1 /* UIImage+MemoryCacheCost.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 245 | - 8BE030582BFA5590BC7A1EB1A7E8DDC4 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C26425407B34D7EF26491A3F6C3412 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 230 | + 8B3648DF3CD6DCE1F23B154EEC9F47BC /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 523A9DF244F75BFD8EF7183295D79237 /* SDAnimatedImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 231 | + 8B36C6BD6BC521D6EBFAA6C06204C8AE /* UIColor+HexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D082DCD13F9572880B69B6E5DBA621E /* UIColor+HexString.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 246 | 232 | 8C0825934BBB790BB7D7F435B99A835F /* UIView+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = C9B5994C44BF5B2184C156762E7CE811 /* UIView+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 247 | 233 | 8C2F2218E1D1A409DB32DEB82289DA8D /* YYDispatchQueuePool.m in Sources */ = {isa = PBXBuildFile; fileRef = F3DE1A955E99033B5412502804883E07 /* YYDispatchQueuePool.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 248 | - 8D6092C5708543E1975D21EF342829A9 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = DA18D81BDAB5332971532C646A936989 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 249 | - 8D7206334016EF356DD5C06DB743927A /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CF9EB80B340726BF23F53617B34B3575 /* SDMemoryCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 250 | 234 | 8E31AD7B15C74C86FAAC41197FFD834C /* UIView+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EC1CFF6509F136C99FC9C20BC2F40A9 /* UIView+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 251 | 235 | 8EF950F7068D194AE492ECE97195952B /* YBIBCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = D90E67DC9CA5A5BBD19018BD64C3ED87 /* YBIBCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 252 | - 8F0623242A13E39BB0068F748D5A7819 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */; }; | |
| 253 | - 9058F00D7FB0F44089EA7418C9BE80CD /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9998D272F6C21B92ECDBCC87B232F260 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 236 | + 902A0F8F36BB0CD612BD333AB538FFC0 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0847D06FD8D970FB3747D3FFE1EF1A98 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 254 | 237 | 909A12FCA29D66EFCCDEE05DEAA25AD2 /* UIScreen+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = F5253D89927E6E90C258D665347D1F07 /* UIScreen+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 255 | - 90B45AE4B48040DD4DF7B2521A41FA93 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = EFFC73CFCA9A8BA73DF3B34FE5E9C8B0 /* UIImage+Metadata.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 256 | - 9140B89832569466DC295558951FF9A4 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FC848A818168BBB863CFE049B98704 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 257 | - 9212629910630E2F8888272B38EA81E4 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B083F58677FB62CBAA120E34B5932133 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 258 | - 92253035C5C62FC047813B453A47011B /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4294BEEA87AE1F76B25087B05E8A9958 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 238 | + 91EC5D1276C67BD151CE0945E99D346B /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DF6A0A2DCDCF701127D57F57D20CEE46 /* SDImageHEICCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 259 | 239 | 92670B7BB6CEA73A198E8A746E1C1CD2 /* YBIBScreenRotationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 305596E45FD137D2410A689DD199F532 /* YBIBScreenRotationHandler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 260 | 240 | 92913C44AD4321D8421DE300F0A9286E /* YYKit.h in Headers */ = {isa = PBXBuildFile; fileRef = F34CC7CBACC2F933C4B4839C7EC1F010 /* YYKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 261 | 241 | 936E1D7A3C66AE0EF67123511CD08229 /* CALayer+YYWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A4D5229E0CA5F30FA43F226DA32F462 /* CALayer+YYWebImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 262 | - 949BA4CC204D826571EA4E85BA769DB7 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DD0F8422DC31BC404DEB779AA5DB139 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 263 | - 95D70798AF08A9AF6AC0455ABAC50B31 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 03964B173BAD2879E938A697CDE23E58 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 242 | + 93EEC3D112C8D5BAF8202BBB7C0F8D40 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 662B362504EE532B6C5EAA6DEDDC5D23 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 243 | + 95AC0F0E049EC392931B147F1BA4C11E /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9EF0789AEFDBB03D69E8BF132003277 /* ImageIO.framework */; }; | |
| 264 | 244 | 96AB2F6D7AE46198D83ED24B28E00003 /* NSObject+YYModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E06030C0DF9E059A44DC7D324FA93760 /* NSObject+YYModel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 265 | 245 | 96FDF5B7C780A120B66EC7342764D4C0 /* NSParagraphStyle+YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5FD9E63BBBE388DFDB5D32A946420D /* NSParagraphStyle+YYText.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 246 | + 972F3D3004A38B2E91B514317462F912 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E028311EA2C17015A8136F9F9A3DEEEC /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 266 | 247 | 9732D149C66794908C965F8C1945C883 /* MKAnnotationView+YYWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CB6B846F24E05FCCCC37E91C2CF35A /* MKAnnotationView+YYWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 267 | 248 | 989D406D24C2A82F500CDA7740E72F7F /* YYTextKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC0CE9E8F82738D36611F6084F5F9C8 /* YYTextKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 268 | 249 | 98D3B3E9EA04801317B3AA768D4653AF /* UIPasteboard+YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E6FAD07C5929BC33D1A767B8226595D /* UIPasteboard+YYText.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 269 | 250 | 991B17A23FB6ED5F941D3DCEEC928568 /* NSBundle+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 9387B514E9488C1E4C98357D42D4112E /* NSBundle+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 270 | 251 | 99A675497C0B12DF9BE36547C3D0BEBF /* YYTextEffectWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D190164465C91A9309173CCE20C5764 /* YYTextEffectWindow.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 252 | + 9A0E1A1BFFD28A2746792BE8D568E3AC /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 22D6E01939BAAB30A2190ACA1D161CDB /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 271 | 253 | 9A4B6430A6C62258BEE1D59C9F32A3CB /* NSDate+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = A27A22E1F51A515951549616C10A4D43 /* NSDate+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 272 | - 9A63822674C925980BCE24CF9162F224 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 507EA85A920020FD53FDF4A254A318F9 /* SDAssociatedObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 254 | + 9AA98747F0FFCB4629345C58F9DFF9A2 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB6A999880D99C4B8EAE70EC4D73221 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 273 | 255 | 9AB3FC2B00EE9E46D879EA2A9DFA6F08 /* NSDictionary+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E435B666CD79060C4FCDA32BA104A7 /* NSDictionary+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 274 | - 9B0ADFBD0EE010BC1AE32B290FAF2D70 /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DC9B7833ED252B3A3CDA8CD870E5136B /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 275 | - 9B9C593A401B16CA1F27613B33259116 /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0786ADD48518359C5D9C950902C74B70 /* SDWeakProxy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 276 | - 9C39FA3EB2A9462B249432F655FC9AA8 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 165A9BD2C6ABE7C53969D2E146053DCC /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 277 | - 9C6F61B6DD8964A03128BB996BCCCDF5 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D134637245A1D1291AEBC7FA27654E /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 278 | - 9CBF5A5EFC5491417ACEF9D2D6F604DD /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 77BDAC0316DE945EDC00877B001E3F13 /* UIImage+Transform.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 256 | + 9BE4B66909D27FA2DEE5D7B4DAF83DD5 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAB61DD2D434A28A27FC5DFC9B7D499 /* SDImageCacheConfig.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 279 | 257 | 9CC0EAE583AE53B63027C788AE199A3A /* UIImage+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = E515123172BB360DF3179CFE108F842C /* UIImage+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 280 | 258 | 9E9EF2A2744A9618CBCF3130012C9C83 /* YBIBAnimatedTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 780BD6CD409902FCCA79E07B8449B0DB /* YBIBAnimatedTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 259 | + 9F45ED51FB250F999DF9EEE26706306F /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 78D88E09C574752B379AC19B8561A84F /* SDImageTransformer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 260 | + 9F69D6D21857F40138D7EF02C9934F61 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 23C27D070CBE7191DD5328960C7C772E /* UIImage+MemoryCacheCost.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 281 | 261 | 9F72C9269F972EEC75FFB02E1B006D75 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A607C9A3CDD44ED7C4A717482C4D60A3 /* UIKit.framework */; }; |
| 262 | + 9F8771C9472203AC8A6B882D32E081FD /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F882F7E87C969BC4F446959C4C96507 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 282 | 263 | 9FB67DB92440E1D202FA1D557981970C /* YYTextDebugOption.m in Sources */ = {isa = PBXBuildFile; fileRef = E904FC5D8903C2F05EA80AE4EB158849 /* YYTextDebugOption.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 283 | 264 | 9FFD301A8B71CD3BBAF1B47ABE706FB3 /* YYFileHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 8475110C42C3E42DC61F264C6BE773D6 /* YYFileHash.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 284 | 265 | A0C1E82073BA9A8D5944BEFE15AEC8AD /* YBImageBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = F871C4EC920DBA02D64392716E35FB37 /* YBImageBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 285 | 266 | A0E47F627106545F7381B76B458ED35D /* YYImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F223C16A87C557408148C7C83CCB705A /* YYImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 286 | 267 | A111957E65E970F7FB802F36D821EA1F /* YBIBImageLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 7310856B16CA1367B57B8768F5EBC3E9 /* YBIBImageLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 287 | - A1B62D4B373543D743AC938090EF65F2 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A20F815CD4F1A80CA68C34C3039D331 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 288 | 268 | A1F850A263BA608683661E1BA3064F24 /* UIFont+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D005AD047909BDCC633A8A2F44C3E0 /* UIFont+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 289 | - A26011648EA7CD910788DBBF08C36F32 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CF482AD1045FF137E38C654A5C5F0A /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 290 | - A3A38FFF99F8F65D21F6526D4D257230 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = BE3ECDB29BE68019FD7DE942E2F58BD0 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 269 | + A24ECE056F5DC1A130E45CD9DFDDAE9D /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = EB79E7A300B9098CE8EED7EB98A1E5AA /* SDWebImageDefine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 270 | + A522F73D14A2CB4DE43E00754C6D504B /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF8FE9BD2DF30E81C73D0170BA7C814 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 291 | 271 | A5751911414FBB4525BA661301645A33 /* NSArray+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = A081063D9132D39C1E65F619E8E08758 /* NSArray+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 292 | 272 | A5D50A13E2D93699A6EA10827F821ACE /* YBIBImageData.m in Sources */ = {isa = PBXBuildFile; fileRef = 98AD2B257D836F916F990B6EA6B2E153 /* YBIBImageData.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 293 | 273 | A6985B155E19B64987FD68C5F251A1BC /* YBIBToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = A57EE7627E17C473032D3846ABCB164A /* YBIBToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| ... | ... | @@ -295,99 +275,94 @@ |
| 295 | 275 | A6EE9E0154F607481961BCD392381B7F /* YYTextArchiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 7975F0485F6C6908DD6A4D47F50E9D35 /* YYTextArchiver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 296 | 276 | A7163439672A8E432F330594FBD927D2 /* YYTextDebugOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 854385CF82D745F34597998325666C1D /* YYTextDebugOption.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 297 | 277 | A7F1C07DCA2C79499E38A78F4C823B88 /* UIControl+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 670ED4D099B5B4C894DE0935874915F0 /* UIControl+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 298 | - A8F9213841A1696CA4E3BAF5B0836F43 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = B75EE1C0C625093DB3961800DCB992E6 /* SDWebImageDownloaderRequestModifier.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 299 | 278 | A912BA340CE09249C7782B1FFD1365AB /* YYTextMagnifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 88CA615592156E78420567B5D69F5B66 /* YYTextMagnifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 279 | + A93168D1B8FE647836641A8FD0960D3F /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D5EFE1BA58FE69FA738DCB9784D3B2E0 /* SDImageLoadersManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 300 | 280 | A96436D0FB439F1F9716DAD1A565FC3F /* YYKVStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = B5756A1321B21D96C7A1AE0F5C4285AB /* YYKVStorage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 301 | 281 | A9BFCA6D140CE8D9F0F30D2D5AF1D3E4 /* YYKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 2472289EA21A4524121647E98565507F /* YYKeychain.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 282 | + A9FB0B1C38B3DF1982D4D8F8B3B99A4E /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9F487DEA2EE1223E588AF5B7968BBC /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 302 | 283 | AA02D1FC38F23E8ABB8437B0B319FE8F /* NSNumber+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F0147BF35758A94C20B1F24F24622BB /* NSNumber+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 303 | 284 | AA30113B879D83233709E1B94AA29896 /* UIApplication+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = B452E9B587B86C63EE21311C07C2F204 /* UIApplication+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 285 | + AA4B92512944686F23ABE5632656872E /* UIColor+HexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E4DCEAC007F7F72A2323A6304B0F4A4 /* UIColor+HexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 286 | + AAB78C68578015956BFE8A56A7E02BA7 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 45487E9C2D9132F54E6DD142FDADCBAF /* SDAnimatedImageRep.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 304 | 287 | AB59B214692AA81FF6315061758603C5 /* YYImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3CBF57D127E6A6C4FD252662C1ADC0 /* YYImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 305 | - AB811350CFBFEC402845394DFB11C5B9 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B31C91F7BAC29DAB475F9F033793951 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 306 | 288 | AF9F20516033D3A05DCC8E8315E30732 /* YYWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C71F70A09014858351E0D2BA6885014 /* YYWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 307 | 289 | B06B32BF6913B604CD51DAC2D7588891 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B7E54CA0E5B57763E180DBA69E47AF /* CoreFoundation.framework */; }; |
| 290 | + B0D15842F6D9B27F7E656D6A3D715329 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = D3B294F209BE90C307D3B79D646A580E /* SDImageCacheDefine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 291 | + B1635A0F2A9E883F5F9478F04F5F9B00 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C68FD0A33D48BF8511F5E1F0AF5F38C /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 308 | 292 | B1AB6D5391A7C80D83FB9A89E8AF6623 /* YBImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 25741E0D4DAB65C050394B8B05242DD3 /* YBImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 309 | 293 | B2105ECF2F00C51A3EA501A3D674DC5E /* YYFrameImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 49508D684CC827AE070DD761E831114F /* YYFrameImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 310 | 294 | B2187DD11B7BE581B5D3C98681AD1FC6 /* YYWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6107B507ED75C5E7304F9AE9131E04CB /* YYWeakProxy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 295 | + B241B25BC7903216B219BCFDD5533ED2 /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = D0BFF09BFCD201810684D60E49FC29B3 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 311 | 296 | B24E0712943BC8C9C7DA39E71877DE59 /* YYTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = AF275D767348041345B5F9C14D9D9CA0 /* YYTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 312 | - B34DA9789249B559F7D135CDC3D4FD77 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C9B03AE8F74ED6BF9967696B1F29AC24 /* SDImageLoader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 297 | + B27865F2F8513D2BAF80C119865014B2 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BAFBDA5FBFB046872240DAA694DBA9D /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 298 | + B2D122DFC079570A5A257B8FEFE1CF4C /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 604FBD4A36B51CB23593D6E7144E0A66 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 313 | 299 | B3D231FFA03E5AD08EA9DB95CC280BF9 /* UIPasteboard+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = C5ECB9A46117BBECE7ED798130B798AA /* UIPasteboard+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 314 | 300 | B43AF7085746A2EDF63AC0561FDC5760 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BDA601294E211EE3B9CBED6DC267A5E /* QuartzCore.framework */; }; |
| 315 | 301 | B4A6A89B7C7A07DEF548DF0821A5D2A6 /* UITextField+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C19B1352F5752908C2B4982AD0FE4 /* UITextField+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 316 | - B52576B08EFC9D67F218CC2DAC542AF4 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A2B670A4915027A69D8298ABAE7832C5 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 317 | 302 | B580D3F3050F9BB858FC126353306F2E /* YBIBImageScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D018046653E9BB9680EF2CF10C5FF7 /* YBIBImageScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 318 | 303 | B5EBC0334766A76DCFF0C05798C37150 /* YYReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D233F6DF8E8D5110BD7F6E76747F33D8 /* YYReachability.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 319 | - B6A52B7697F15B487F846F3DA1CB3896 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 176BE9B96FD0004A2FDAD77CA2B59BEF /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 320 | 304 | B6B29A71C36975429AB1368727403423 /* NSNumber+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 7355C552B642A7D227CB76CDCD03E2F8 /* NSNumber+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 321 | - B6B6619A760B666DE47643F684DCF92A /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 82CFF2AD22CF5568454DF140CCC1FBC4 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 322 | 305 | B6C28098B1907228C45A14E207D55AFE /* UIImage+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B3D662CF91D27FFEF32389911E85D0 /* UIImage+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 323 | 306 | B7AC252781ACA15FC73AF12490F21160 /* NSTimer+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CE22FC473D05C3D81125FB08264318F /* NSTimer+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 324 | 307 | B7D446CF8E8826A56E6D15929115BE04 /* YBIBGetBaseInfoProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B7C9B42ACA0B5782A356C5AE7A908B3F /* YBIBGetBaseInfoProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 308 | + B81B452FC4B5B6F7812022013E0050F9 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D7D182C7944184D8687D02BC5895C8A /* SDImageFrame.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 309 | + B9EAA2FEBC24879CE426A200D1943850 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E7D951E27DDF1D0327C691AC350863B /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 325 | 310 | BA6F7BA03B9D0D30084C3ADE291F6473 /* YBIBVideoTopBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 26B0E0EAD79931B3B4465C9353F4AEE3 /* YBIBVideoTopBar.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 326 | 311 | BC58E6F1DB34E6D18AC043F147EB68A5 /* UIScrollView+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 0849338E27EFD23893C5843535A67BD6 /* UIScrollView+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 327 | - BD1CC866FEB3E8226394BA640E7FA900 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C715A63047EF7CF84A44FC37DB4E919 /* SDImageAssetManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 328 | - BDACD97A89128CDAECEE9F2C66A68041 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E26822C5FA7DDEE80076B4E7C2728A9 /* SDImageCodersManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 312 | + C15872A8795C18D17D7CB78D0D2AF5A9 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF16A9C9A9AF5DDC141A40D41D0467E /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 329 | 313 | C15CF0D0B7F57A8BB9EDA5F3A0EB4415 /* YYMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D8F6D1F22DBBBCE9CEB97BF76ED5F6 /* YYMemoryCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 330 | - C32C3C747D6831244FA97E55D7EBC211 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A70D2708290382BD7D9078C968FDBFD /* SDWebImageError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 331 | 314 | C336129A2AC12AEED1703E6863707C69 /* NSObject+YYAddForKVO.h in Headers */ = {isa = PBXBuildFile; fileRef = 52BE96D687228A93E19263F07010C4F8 /* NSObject+YYAddForKVO.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 332 | - C71E6525587D5FFE318A222C092FA6AE /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = F71C63A56CAAF9072729B55B779D9414 /* SDWebImageIndicator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 315 | + C50CAA073FFEC5DFDB16A59830E97C95 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = 565EA3FF9DE0069950D12760CD92E6DF /* SDInternalMacros.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 316 | + C60409B7C6D34D479F3DC7157194706B /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6821ACBD9902AD3AEC5766052616BEFC /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 333 | 317 | C78E2BB89633512E1E77690E47840731 /* NSString+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 200049C9763118B9DADAC88FB3401C9D /* NSString+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 334 | - C854CD2F89E00E88FB1D6669A770DEE0 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F0B0EB007B67E5D110E4AA7E75CC5E8 /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 335 | - C88E97ED465D3973A3D9FD7AE94BDB9A /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FACAD68445DC5C8232A29CDDE00106 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 336 | - C8D1A63DACC1ED208C203641C69EEEF1 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 03C7B13F9A65433A2099280BB0853B83 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 318 | + C8719B604AC23450E05D0E2F5716C8EE /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F59687F8773BB30C3383C0C4473BA5A9 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 337 | 319 | C907A97665955ECF4DDD418449F11390 /* YBIBScreenRotationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 34FA97BD63CC23B9293C28CC94F1935E /* YBIBScreenRotationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 338 | - C94DE8F907543852C6C5311CE0A2752A /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 255A9E38BCE069FD5BD5AA7B2554059D /* SDWebImageDownloaderConfig.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 320 | + C926C81B2AE4D970FF43FA6854DF11B3 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 29332085AB2D0312202A5E4DA9903355 /* SDImageGIFCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 339 | 321 | C9D04AD8C1E863F36DA77847B7DC00FF /* YYTextContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F3722F221BDAC94870B0E9231FE44B7 /* YYTextContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 322 | + CA2A04B40C4584BB62EDF451D4691393 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 82DA1AE31B883B0A558F1A7C451C5411 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 340 | 323 | CA376D8F23487BDFB24C801D2317FD4D /* Pods-YBImageBrowser_DSCnliveShop_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A8AA845C7A4050F81BBFEC526B2B62 /* Pods-YBImageBrowser_DSCnliveShop_Example-dummy.m */; }; |
| 341 | - CAD57C741FFBC3EBCA19E4F1891E4FDA /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1019E03A5B1C662AEA03A27BAD9451 /* SDWebImageOptionsProcessor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 342 | - CBA469E2DD8702DECB634A81F850C516 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3103E35D6924D70FC117A1BFA21077C8 /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 343 | - CC1B7B642CBAEA58A27D410B329E5FFD /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E94B7142D84F4E7AD5A126B60C5056AA /* SDImageCoderHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 324 | + CB6B765C0485EA0801AC5AD27B988336 /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = ACDF74FCCC69765D4B60B3DBEC369C3D /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 325 | + CBEDB718B4AB4391588A9347C9F03C4A /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C86D29287795201B7A91BA858DBC2FB /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 344 | 326 | CC66D7F8BA25145CFA356804A0482B18 /* NSKeyedUnarchiver+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = BE4A801C5A9481E70AE53035D5B98760 /* NSKeyedUnarchiver+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 345 | - CCEF1E548BE78064BE12CC29D9977A28 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = C54648ED166C9850805DF18B9BF1A305 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 346 | 327 | CD03525AD1F8D60C1C0AC8297DE34E11 /* YYTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = C8FC24C723EADE5F3C5975BE2907EB1E /* YYTransaction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 347 | - CD06DC5FCA424D8A0928068BEB8AF2E5 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 491254BCC101B0465D55540272375AB3 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 348 | 328 | CD7563B5139A26E5B8B2587E0D658705 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */; }; |
| 349 | 329 | CDCE6593D130D8CDEDF0B621B0205E1A /* YBIBIconManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 243FDB361CEF50A59E549280ECDFF076 /* YBIBIconManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 350 | - CF1AA8850ED16C5F49B61BC3A9B13DD7 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E5A710E84F3BA6FCB0CFF41E78AD5CBD /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 351 | - D0725567B7BD18C79A04E5EC9C72249D /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 8811346772E1C5599090A46F4A2D8681 /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 330 | + CED0ADFAFACBD8EAC91D8FDFAD72CC3D /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 92986682144C6A680D1688CC72DB03EB /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 331 | + CF5BBB5AA6B556A33F0FD0CBF107B538 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C89C4C20801869E17ED28D5BC0002C7 /* SDWebImageCacheKeyFilter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 352 | 332 | D0C427F2B55EA4B9699DC5021958111C /* YYWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BCBF70C32E733B22D48AF84D60FF7B02 /* YYWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 353 | 333 | D0D66AD4AB7E3486337F71C17BF3AD57 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1A59D21F9903431B185E3E4DF0AFFEF /* CoreText.framework */; }; |
| 354 | 334 | D0EE21B9D50E334EAF1A380286222F0C /* NSObject+YYAddForARC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D38FB225790DDA600C42DF52D9CC17F /* NSObject+YYAddForARC.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 355 | 335 | D117372BE748F203CB46905AD37E4068 /* UITextField+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FC28E23CABD3BDE6EAB1ACECBE0303A /* UITextField+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 356 | - D2EDDDAA1E3498604C570DA06526C7BA /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = D2BF5A3EEE1A287B05D28198D9F16C76 /* SDImageFrame.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 357 | - D347FCF56E468483A546E1F611DE081C /* SDImageHEICCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C263B2AFBE7F6297AC0A2DD306AE5B6A /* SDImageHEICCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 358 | - D43B9E05CBF3046EB696F0357E263B54 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D32E803217C60CD15496E8FBD13FDF /* SDAsyncBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 359 | - D4F67B56B3A2910031B248E07BC0FF9F /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C758F6AA3BEFD52D81A2E68FD89C92BC /* SDImageGIFCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 336 | + D4C9FCF4108BF46522DA445E47524A6A /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 45EBF80603A6BB114FFDF460A6A20CC7 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 360 | 337 | D69F7D5FC2B9F449EFD85CD54B17E575 /* YYKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8E8FC3A2C5BD919F913AD5ED4E1EAC /* YYKit-dummy.m */; }; |
| 361 | - D6FDFE95CEDBD0A41D4E16FDB1599FA9 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DC1F761B34C39B4907D5DB70157ABFC /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 362 | 338 | D7C4871BB56F79A08300DD66AFDCF5DE /* YBIBVideoCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B62F0134660F292CE152D8E39947BD /* YBIBVideoCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 363 | 339 | D827404302AC7E95F7667CC14AE08594 /* YYTextAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 57078E9B88965F537213B04FEDA909B2 /* YYTextAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 340 | + D84BE358D7B1195BCA3556D7A0003968 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = C090D5ECCFD39D2D4DF00BFB1D9DAB81 /* UIImage+Metadata.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 364 | 341 | D92524C9E26C07719E07A9786B6B7892 /* SDWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C33607D6BC000651FEC30D2EED376D88 /* SDWebImage.framework */; }; |
| 365 | 342 | D96C39BA6D0884492E921E34AE5A1C66 /* YBIBVideoData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C3487B98119240E45C8448E84C5F249 /* YBIBVideoData.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 343 | + D9B0AE61DB0C28C1A453C57DBAA9894C /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = BBC835DD376D230B30079993F2F5CDAA /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 366 | 344 | D9F2C1489EE9A0E4071E01C3ACC142F2 /* YYTextKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A177B060DEA91DB2671E9EACA4576579 /* YYTextKeyboardManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 367 | - DA1F5EB06521252BF63369AFEF914368 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = D60E08CE2DF723239081CE2F04FA6324 /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 368 | - DB42064F83C6224213B940B249FC26FF /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C36986E68072E6D37FC44159464E6E63 /* SDDiskCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 369 | - DCDC5264F294AB9A622D368F2F7FA336 /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 615E0DE04702B1FE637909AB79E77479 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 345 | + DB7CB011D38A0CF4CBA6380FF04F0B61 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C54E545CC107D12C2F5AA2887BAF107E /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 346 | + DBB84BD7F62230F01B7533CF5DB8E2B8 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 645FAD055E96DC89E3CF7A287A4B4F87 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 370 | 347 | DD25E262CDFAD075F62392B989CA6F4B /* YYSentinel.m in Sources */ = {isa = PBXBuildFile; fileRef = 264A3613CC394403F6228A3FD0B83D06 /* YYSentinel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 371 | - DD784DFACF8863C7D46B9054B0DD7C42 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = FCDCB1EFEE1048CBC6179F66B7E7E6E9 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 348 | + DDA63B6A16CAEC9EDAB8721409ED65EF /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = CB33D1B5F3A87441C78240849B1BD409 /* NSImage+Compatibility.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 372 | 349 | DDD32790B4BCE5190906DEEED75A5860 /* YBIBVideoData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF359196C08E19807F14F0B35AC0E0C /* YBIBVideoData.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 373 | 350 | DDE5067059454F98CD6B2426D61716F7 /* YYAsyncLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B19431AF11994E0CA59423A7DAE3628 /* YYAsyncLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 374 | - DE311CA167D40330E2B71F4726A6B789 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D17D294A9F7DCF9895D5A3337D8B886 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 375 | 351 | DF369A9EB40F06EEB590C41610BA2A10 /* YYTextRubyAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 517A0A3DCA0C56126084B689FBE105E9 /* YYTextRubyAnnotation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 376 | - DFE7857272AA4CDEC686248E790174F9 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CA0E2F59E86C22963A7F42A601D4D9D /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 352 | + E05830BFF728135BC1A3FCD86B02AFED /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F033ABEC9F3EFAA01FDA65E76374B4 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 353 | + E159EA4B9CE7CA4EA7CC422F1BB359D0 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DCA9751DEFA2CAEA416E397CD0197E4C /* SDMemoryCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 354 | + E1A13F65E327E70ED0A0322ED9D4E004 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = EBC3A38B3CF4356703DC4ABF85E1FB8C /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 377 | 355 | E2AC119414A24C6B254F4EFD910B6364 /* YBIBImageData+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5356E679669AF6B1D86C87ED02DE9228 /* YBIBImageData+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 378 | 356 | E321AD2370258DCF759B1C35DD419F41 /* YBIBOrientationReceiveProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 162ED1D7AFB75ACCB3368BC29019D8E8 /* YBIBOrientationReceiveProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 379 | - E48B7D3309D22470B53A3EB47B6577E7 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 7025B67B4A01BBCCCFB1958DC25846D2 /* SDWebImageDefine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 357 | + E4C4C17E15D7F01D31091341E3B22767 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DE00CB7B46BD9384E27CFF44A22F3D6 /* SDImageCoderHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 380 | 358 | E655FF4E00EF146816A4A40588F91180 /* YYKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 75DDFEB8B1AD695874CDD5C0116D3C02 /* YYKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 359 | + E807BB2D53EF822DDA0109BEB8F33F4B /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 458C3BA863BEC4A0D1766E7096A16EF8 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 381 | 360 | E932BE7F6FC5497A6F685D0EF875A817 /* YYSpriteSheetImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 220E77F927A6690D18D2E5FD80F7BE63 /* YYSpriteSheetImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 382 | - E9B97B2FD84DF4015AABD7E5978A710F /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E05A254217112511844A5ABAEA26D88 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 383 | 361 | E9E7E25145EFE32065FFB8232DC42D8E /* YYTextAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = A0964A9B921F37553978DBD848A921DC /* YYTextAttribute.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 384 | - EA50654643EF702D7F2DD17534459EAB /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8582059F08F05B024B1E63DB97E6FC3D /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 385 | - EA5AE4148E9B9228E70EDB7F575D111E /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 0804ADB1BA257EF0FBCE5877305E5CBA /* SDWebImageDownloaderResponseModifier.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 386 | - EB634403E13B36687931F62769C04F66 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = DB7A93383CAC54408CD5E5B395011B2E /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 387 | - EC14B2E8E460DFC2E4EB78A9FC10117C /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8603634C14CA0EB02BA831268B0C10 /* NSButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 362 | + EBD6DC15D9DA29829CD9A5BA5F2B2A76 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F6363B89177C5ED56B90058D1B1B9A /* SDImageGraphics.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 363 | + EC2A8CA5F7249A4197E707E8008C2CAF /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = EDCF5C73C34D7FE7CBD5AEC45E26DD16 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; | |
| 388 | 364 | EC8034BDEF204F42C1F8FD47F69C72C2 /* YBIBCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CE5CC75231FB5BA4F8EB1071D6A3B3 /* YBIBCollectionViewLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 389 | 365 | ECAB0BF105639461A59A044E08301859 /* YYTextParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4509C09CF0DD15FBEB1EAF90400333B3 /* YYTextParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 390 | - ED388349310FF50899F3AEB5E2DF0500 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6721C57EE2049316FC7DFA0EC2F61B33 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 391 | 366 | ED419C4C5639D374160458959782CECC /* YBIBImageScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DEB9108C68D52B1B6E58D88118E1BCA /* YBIBImageScrollView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 392 | 367 | ED434BACBB1031EB88803A3F3D53D0F2 /* NSDate+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DE54B8C45B333743F49C490C8A51D59 /* NSDate+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 393 | 368 | EE483E73A32B03DDEAFC3D0C7D23A998 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 826A0D9FB100D729C86AB5FF081F6521 /* Accelerate.framework */; }; |
| ... | ... | @@ -396,7 +371,7 @@ |
| 396 | 371 | EF0747F501C75F83DED72B2790BE5B5F /* YYTextRubyAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F845FF4245B2F5F6327C08F01B5738F /* YYTextRubyAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 397 | 372 | F007745FE5F7A414A2DBD361AA8CC41B /* YYKVStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = F8D3E6C92E8F4DF67950E0380B5C4AD1 /* YYKVStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 398 | 373 | F01C35CC142BDBE879078A8E52D9DED3 /* YBImageBrowserDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DE1BA937D17936A4E8CC48CCF258E498 /* YBImageBrowserDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 399 | - F045BDBF956B9EE5340F3225336EDAC6 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 92D743407EFB5C298F8E9856F618DE87 /* SDWebImageCacheKeyFilter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 374 | + F0AB74AED6D7C008445C01678F59B54D /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F4BDDDF94411952465D7BEFFCA8B5C29 /* SDImageAPNGCoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 400 | 375 | F160637862E5B0125D069F7929777F1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */; }; |
| 401 | 376 | F21C9E78F6663605A36593123F851ECF /* YBImageBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BB297824FFFF51C70FA022B56A9D4F /* YBImageBrowser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 402 | 377 | F2A1EDFD9B0498CA877D75380EB946AB /* YYCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 074CC9782671ADCAC40FE44E9B57EB2D /* YYCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| ... | ... | @@ -404,7 +379,7 @@ |
| 404 | 379 | F3A055F58CF9B5A694EB4AABA1E51B11 /* UIScrollView+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = F891D9C6F80528B90027D56EA36CD7DA /* UIScrollView+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 405 | 380 | F3F08BAB397CD4760A921D6FFAB91D09 /* UITableView+YYAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = E0EC1E067A40BD358E24914526274E18 /* UITableView+YYAdd.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 406 | 381 | F41DB7D94F86FC028BB3765429E83496 /* UIImageView+YYWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = A84A5680B20A545C99B07392B9AA4B21 /* UIImageView+YYWebImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 407 | - F4BE0CAF1D4BF04D766DB4A25AE4A4C2 /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 1062A5D5F16F52CCF19B547AC48CFF6B /* UIColor+SDHexString.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 382 | + F4A2A3265060EE0EC36AE153BA2F11F1 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = CB003CB825038F390A91BFD066D5DC11 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 408 | 383 | F51107CAE592A67C12F6A654AA9DE72B /* YBImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3236EA97B14313391E71CA2593DBB697 /* YBImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 409 | 384 | F57BB6C1959FC38F369D20C3D6280478 /* YBImageBrowserDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 332163CABE8CA20F1CDE74064906F999 /* YBImageBrowserDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 410 | 385 | F6B4A873DB7EFD81739BB935180213F3 /* YYSpriteSheetImage.m in Sources */ = {isa = PBXBuildFile; fileRef = B9C280A5938040751695347877F4D8C2 /* YYSpriteSheetImage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| ... | ... | @@ -412,16 +387,21 @@ |
| 412 | 387 | F70B261CE6AF733A33E7AF41C5D96628 /* YBIBDataProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F109F39280C7548AA77C244ED5675B /* YBIBDataProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 413 | 388 | F7532455FBADCB4B6D671A76A015BCDF /* YYGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 12443FCD2F18C4DFCA505874F97F9BB6 /* YYGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 414 | 389 | F7952C8743A3C3698661727A575F134A /* YYCGUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 90A4B22BA3CB13452A0C80DA86A84A42 /* YYCGUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 390 | + F7C220B780BE3FFD43D49EB09A4AA120 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D25E5ABBC1DC5FB5597B7FD6AF7395A6 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 391 | + F855CDFE0F0B48A22F8F0B4CD25E3F2A /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 17822DDCEE5C075412F1B1A731F006F2 /* SDDiskCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 415 | 392 | F881E7F260550EEED2EC9C45749BFC7B /* YBIBContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F73A399C03844F00743876DD304D6F5F /* YBIBContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
| 416 | 393 | F8F4D168EA046BD783E82D35CD3B114C /* _YYWebImageSetter.m in Sources */ = {isa = PBXBuildFile; fileRef = 52A857F7C6A4B03E17C6CC6873436387 /* _YYWebImageSetter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 394 | + F981FD60C717579B06FC77EBE5E3ECEE /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F4A5B2FFD435932DC069C91BA243B8A /* SDWebImageTransition.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 395 | + F9CD37EE6DD796D86FAFCE65C106D553 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7A1C78766D1A651D4233A02DFD21C1 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 396 | + FA1132270226AEC00FD163A760F5BFDD /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = E8864E2BCB6F0A60BF7660FD5CA61884 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 397 | + FA626556DE0DB5DBE98269492EB9D858 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E0438EB685599B92473E4BBB56C9271 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 417 | 398 | FA6BA0853D951EDC88B27A2C94306C49 /* Pods-YBImageBrowser_DSCnliveShop_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 65851769AB362F92EB866E5610C88E6C /* Pods-YBImageBrowser_DSCnliveShop_Tests-dummy.m */; }; |
| 418 | - FC4DE0456F37E3F47195E5F969314E0F /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA24BB0F92E4A49AC0BE6BF22D67546 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 419 | - FC5E54109CC0090D7CA4492C6225E5BB /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FBBBA584888406A53BBAB4C8E646119 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 399 | + FB731F3EEA54F44A238FBBFED93D9974 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 42406C450631485B971273EE79B37A12 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 400 | + FC5F561CA670D699F300DDA4FE2D8314 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = FD9DAE7E5EAD3CA463241E107ADB319B /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 420 | 401 | FCDAE4EE1EF7F75A6D9E465032A3EE25 /* UIBarButtonItem+YYAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = B70A20C0814370A0A1C72AE2E522CAEB /* UIBarButtonItem+YYAdd.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 402 | + FD42C3773D4CE1E4ED8BC78369EE4898 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B69A0F6649EAEED316A983843ED5614 /* SDWebImageDownloaderConfig.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 421 | 403 | FEB886C7ED26265911E85FEFEBA8891A /* YBIBVideoActionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DBD9F3341AE38C875BBD42C62516B07 /* YBIBVideoActionBar.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 422 | 404 | FED2D036DCD6FF18C7AF6E251407E6B2 /* YBIBAnimatedTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 01D57BDAA3D3C2148F62CAB6FCFF0336 /* YBIBAnimatedTransition.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; |
| 423 | - FEF33326D4B5B59DFD0CA1DFAD4001FC /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C016044B645AE229C947C4E2E37F78B /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; | |
| 424 | - FFA5793DBEE9AB3CC5C01F5B6F0B1151 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E844CC98D96DCD6F0EFE36CFF13BF /* SDFileAttributeHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; | |
| 425 | 405 | /* End PBXBuildFile section */ |
| 426 | 406 | |
| 427 | 407 | /* Begin PBXContainerItemProxy section */ |
| ... | ... | @@ -484,92 +464,86 @@ |
| 484 | 464 | /* End PBXContainerItemProxy section */ |
| 485 | 465 | |
| 486 | 466 | /* Begin PBXFileReference section */ |
| 467 | + 0027B01676377B9218BE8AA537BDAA8A /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; }; | |
| 487 | 468 | 01925082D3D68AFAC34FD497668DDF52 /* YBIBTopView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBTopView.h; sourceTree = "<group>"; }; |
| 488 | 469 | 01D57BDAA3D3C2148F62CAB6FCFF0336 /* YBIBAnimatedTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBAnimatedTransition.m; sourceTree = "<group>"; }; |
| 489 | 470 | 027369B6DC1B43C3102AE522A00B351F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; |
| 490 | 471 | 03021F927B254ED434510FB85A91E7DE /* UIApplication+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+YYAdd.h"; path = "YYKit/Base/UIKit/UIApplication+YYAdd.h"; sourceTree = "<group>"; }; |
| 491 | - 03964B173BAD2879E938A697CDE23E58 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = "<group>"; }; | |
| 492 | - 03A09A7D80E19CC940BE2323D0536D61 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = "<group>"; }; | |
| 493 | - 03C7B13F9A65433A2099280BB0853B83 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = "<group>"; }; | |
| 472 | + 03917DDCF8C121DD56B0AD9B603C2B9D /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = "<group>"; }; | |
| 494 | 473 | 0501ADF2BFD7B3CD05199AEA120542A3 /* NSParagraphStyle+YYText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSParagraphStyle+YYText.m"; path = "YYKit/Text/String/NSParagraphStyle+YYText.m"; sourceTree = "<group>"; }; |
| 495 | 474 | 05B6665B0FCAC9FA4988670409B6B9EF /* YBImageBrowser+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser+Internal.h"; sourceTree = "<group>"; }; |
| 496 | - 060133C4A0CD84D7E43EA5A6AE35A7BA /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = "<group>"; }; | |
| 497 | 475 | 074CC9782671ADCAC40FE44E9B57EB2D /* YYCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYCache.h; path = YYKit/Cache/YYCache.h; sourceTree = "<group>"; }; |
| 498 | - 0786ADD48518359C5D9C950902C74B70 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = "<group>"; }; | |
| 499 | - 0804ADB1BA257EF0FBCE5877305E5CBA /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = "<group>"; }; | |
| 476 | + 0847D06FD8D970FB3747D3FFE1EF1A98 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = "<group>"; }; | |
| 500 | 477 | 0849338E27EFD23893C5843535A67BD6 /* UIScrollView+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+YYAdd.m"; path = "YYKit/Base/UIKit/UIScrollView+YYAdd.m"; sourceTree = "<group>"; }; |
| 501 | 478 | 09221948BA0D8609E66D29534B1637F9 /* Pods-YBImageBrowser_DSCnliveShop_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-YBImageBrowser_DSCnliveShop_Tests-acknowledgements.plist"; sourceTree = "<group>"; }; |
| 502 | 479 | 09D461072FB1F94116B94C3D35ADC919 /* NSKeyedUnarchiver+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSKeyedUnarchiver+YYAdd.m"; path = "YYKit/Base/Foundation/NSKeyedUnarchiver+YYAdd.m"; sourceTree = "<group>"; }; |
| 503 | 480 | 09FA23E05944FF1B0AD4A1CAE80AE86E /* YBIBCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBCollectionView.m; sourceTree = "<group>"; }; |
| 504 | - 0A70D2708290382BD7D9078C968FDBFD /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = "<group>"; }; | |
| 481 | + 0AA629F1636B9E5C1E7779416F41894F /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = "<group>"; }; | |
| 505 | 482 | 0B392E50F95AAAED6E6AF60D7A6FBA53 /* UIColor+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+YYAdd.m"; path = "YYKit/Base/UIKit/UIColor+YYAdd.m"; sourceTree = "<group>"; }; |
| 506 | 483 | 0BA7CBEA43C737A330D9608FE7806297 /* YYCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYCache.m; path = YYKit/Cache/YYCache.m; sourceTree = "<group>"; }; |
| 507 | 484 | 0C9EBF2F4721D7796CABB86E57141312 /* YYTextSelectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextSelectionView.m; path = YYKit/Text/Component/YYTextSelectionView.m; sourceTree = "<group>"; }; |
| 508 | 485 | 0D2681FA26C64223B316B544D77AA55D /* Pods_YBImageBrowser_DSCnliveShop_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_YBImageBrowser_DSCnliveShop_Tests.framework; path = "Pods-YBImageBrowser_DSCnliveShop_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 486 | + 0D7D182C7944184D8687D02BC5895C8A /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = "<group>"; }; | |
| 487 | + 0E9E88F1E31A013B69A717855A9A782E /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = "<group>"; }; | |
| 509 | 488 | 0EC1CFF6509F136C99FC9C20BC2F40A9 /* UIView+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+YYAdd.h"; path = "YYKit/Base/UIKit/UIView+YYAdd.h"; sourceTree = "<group>"; }; |
| 510 | 489 | 0F845FF4245B2F5F6327C08F01B5738F /* YYTextRubyAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextRubyAnnotation.h; path = YYKit/Text/String/YYTextRubyAnnotation.h; sourceTree = "<group>"; }; |
| 490 | + 0F882F7E87C969BC4F446959C4C96507 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = "<group>"; }; | |
| 511 | 491 | 101F73BF4899F419E3CC133F2A9180D4 /* YBIBContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBContainerView.m; sourceTree = "<group>"; }; |
| 512 | - 102A8609FE38B44A4F04554766133491 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = "<group>"; }; | |
| 513 | - 1062A5D5F16F52CCF19B547AC48CFF6B /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = "<group>"; }; | |
| 514 | - 1072A8A4B2B89ECA95DD401CFB50F108 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = "<group>"; }; | |
| 515 | - 115DF10AB89F4BD3959B0760E6FF7F5A /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = "<group>"; }; | |
| 492 | + 106CDD63C990007C4EBED229576FD0E6 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = "<group>"; }; | |
| 516 | 493 | 1238AEB9DF5C8189A50C5E4E0B74DC2E /* NSObject+YBImageBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSObject+YBImageBrowser.m"; sourceTree = "<group>"; }; |
| 517 | 494 | 12443FCD2F18C4DFCA505874F97F9BB6 /* YYGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYGestureRecognizer.h; path = YYKit/Utility/YYGestureRecognizer.h; sourceTree = "<group>"; }; |
| 518 | - 1249E97F29FD39E6B5CA9DD3D122921C /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = "<group>"; }; | |
| 519 | 495 | 1252A4B51C377A0204EA817105C31367 /* YBImageBrowser_DSCnliveShop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YBImageBrowser_DSCnliveShop.debug.xcconfig; sourceTree = "<group>"; }; |
| 520 | - 12B66AB16766AB4060516E7814443E08 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = "<group>"; }; | |
| 521 | - 13211B603D4A4D4D2724F2C5BB4407D3 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = "<group>"; }; | |
| 522 | 496 | 13CCFEB0FA63FC0D2DCDF8E5B3E3CC33 /* YBIBSentinel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBSentinel.m; sourceTree = "<group>"; }; |
| 523 | 497 | 13EFE3DD1D702D85B36FB7D106BC163F /* YBIBSheetView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBSheetView.h; sourceTree = "<group>"; }; |
| 524 | 498 | 13FA3D010FCAB935A4C1E9CC535A7D28 /* YYImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImageCache.h; path = YYKit/Image/YYImageCache.h; sourceTree = "<group>"; }; |
| 525 | 499 | 14462A5B7907FCC9A6CC6EAD33842356 /* YBIBPhotoAlbumManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBPhotoAlbumManager.m; sourceTree = "<group>"; }; |
| 526 | - 14EF33DBBD181973544221E30D2DC4B9 /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = "<group>"; }; | |
| 527 | - 14FC848A818168BBB863CFE049B98704 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = "<group>"; }; | |
| 528 | - 15DA0DE7F827744C2CD1C503B90ED22A /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = "<group>"; }; | |
| 500 | + 14AEC03CE74FA3C1ED22FD08ACDC489F /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = "<group>"; }; | |
| 501 | + 159B608142C5AD0E99E00479F64CDAFE /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = "<group>"; }; | |
| 529 | 502 | 162ED1D7AFB75ACCB3368BC29019D8E8 /* YBIBOrientationReceiveProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBOrientationReceiveProtocol.h; sourceTree = "<group>"; }; |
| 530 | - 165A9BD2C6ABE7C53969D2E146053DCC /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = "<group>"; }; | |
| 531 | - 176BE9B96FD0004A2FDAD77CA2B59BEF /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = "<group>"; }; | |
| 532 | - 1780A6FB6896D6EE58CA176A32A91167 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = "<group>"; }; | |
| 533 | - 17C2170C0DA7F6751732A3F6F2D3304C /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = "<group>"; }; | |
| 503 | + 17822DDCEE5C075412F1B1A731F006F2 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = "<group>"; }; | |
| 534 | 504 | 18D018046653E9BB9680EF2CF10C5FF7 /* YBIBImageScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBImageScrollView.h; sourceTree = "<group>"; }; |
| 535 | 505 | 1A3ACB33EE20D3ACBAED2B2528ACF51B /* YYKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YYKit.modulemap; sourceTree = "<group>"; }; |
| 506 | + 1A7213E5D815346B024AC2C78B59AE7E /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; }; | |
| 536 | 507 | 1ABDD0D167F87048EDFBCF3A1E54B781 /* YYTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextView.m; path = YYKit/Text/YYTextView.m; sourceTree = "<group>"; }; |
| 537 | 508 | 1BDC88838DB7DE47299D42DFB1449C97 /* UIImageView+YYWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+YYWebImage.h"; path = "YYKit/Image/Categories/UIImageView+YYWebImage.h"; sourceTree = "<group>"; }; |
| 538 | 509 | 1C3487B98119240E45C8448E84C5F249 /* YBIBVideoData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBVideoData.h; sourceTree = "<group>"; }; |
| 539 | - 1C715A63047EF7CF84A44FC37DB4E919 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = "<group>"; }; | |
| 540 | - 1ECDD31DCADBB91FE191C953267FFF2D /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = "<group>"; }; | |
| 510 | + 1EE818633CBD870C5763EC5A7DEEFEBB /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = "<group>"; }; | |
| 511 | + 1FB1475C6AAE3E931553C57D2012437B /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = "<group>"; }; | |
| 541 | 512 | 200049C9763118B9DADAC88FB3401C9D /* NSString+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+YYAdd.m"; path = "YYKit/Base/Foundation/NSString+YYAdd.m"; sourceTree = "<group>"; }; |
| 542 | - 20421D13A41D462848F051647414A829 /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = "<group>"; }; | |
| 543 | 513 | 2058F8BF3995BDEFE75215FA94771AA0 /* UIColor+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+YYAdd.h"; path = "YYKit/Base/UIKit/UIColor+YYAdd.h"; sourceTree = "<group>"; }; |
| 544 | 514 | 2083BC9AABD59C97DC155E29DC3E9A9F /* NSThread+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSThread+YYAdd.h"; path = "YYKit/Base/Foundation/NSThread+YYAdd.h"; sourceTree = "<group>"; }; |
| 545 | 515 | 220E77F927A6690D18D2E5FD80F7BE63 /* YYSpriteSheetImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYSpriteSheetImage.h; path = YYKit/Image/YYSpriteSheetImage.h; sourceTree = "<group>"; }; |
| 546 | 516 | 22CF3B73FF5F5A8C94227088CE5E0FC8 /* YBImageBrowser_DSCnliveShop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser_DSCnliveShop-prefix.pch"; sourceTree = "<group>"; }; |
| 547 | - 232C7410166470C58B9D7DD4BEE465D6 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = "<group>"; }; | |
| 517 | + 22D6E01939BAAB30A2190ACA1D161CDB /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = "<group>"; }; | |
| 548 | 518 | 235A9602CEADB22A070933C84D790CE0 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; }; |
| 519 | + 23C27D070CBE7191DD5328960C7C772E /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = "<group>"; }; | |
| 549 | 520 | 23CB6B846F24E05FCCCC37E91C2CF35A /* MKAnnotationView+YYWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MKAnnotationView+YYWebImage.h"; path = "YYKit/Image/Categories/MKAnnotationView+YYWebImage.h"; sourceTree = "<group>"; }; |
| 550 | 521 | 243FDB361CEF50A59E549280ECDFF076 /* YBIBIconManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBIconManager.h; sourceTree = "<group>"; }; |
| 551 | 522 | 2472289EA21A4524121647E98565507F /* YYKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYKeychain.m; path = YYKit/Utility/YYKeychain.m; sourceTree = "<group>"; }; |
| 552 | - 255A9E38BCE069FD5BD5AA7B2554059D /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = "<group>"; }; | |
| 553 | 523 | 25741E0D4DAB65C050394B8B05242DD3 /* YBImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBImage.h; sourceTree = "<group>"; }; |
| 524 | + 2594CEE3269A686FE6A32ADF1ACDA903 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = "<group>"; }; | |
| 554 | 525 | 264A3613CC394403F6228A3FD0B83D06 /* YYSentinel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYSentinel.m; path = YYKit/Utility/YYSentinel.m; sourceTree = "<group>"; }; |
| 555 | 526 | 268BFC97CAD611337B98EA380097C255 /* YBIBImageCell+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBIBImageCell+Internal.h"; sourceTree = "<group>"; }; |
| 556 | 527 | 26B0E0EAD79931B3B4465C9353F4AEE3 /* YBIBVideoTopBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBVideoTopBar.m; sourceTree = "<group>"; }; |
| 528 | + 26EEACAD4CFF038839E5CAE01FC51426 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = "<group>"; }; | |
| 557 | 529 | 28231517D2EC4777AA0E1F8613912A64 /* YYDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYDiskCache.h; path = YYKit/Cache/YYDiskCache.h; sourceTree = "<group>"; }; |
| 558 | 530 | 282546E77187445CF7EBBDFA4E5CA774 /* YYImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImageCache.m; path = YYKit/Image/YYImageCache.m; sourceTree = "<group>"; }; |
| 531 | + 29332085AB2D0312202A5E4DA9903355 /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = "<group>"; }; | |
| 559 | 532 | 29A3DA3355DD6482745F7763E549FDEC /* YYTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTimer.m; path = YYKit/Utility/YYTimer.m; sourceTree = "<group>"; }; |
| 533 | + 2B9F2CAB3EBC390CC9C5DF6FEB4AE54E /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = "<group>"; }; | |
| 534 | + 2C6338E013B6CE8A040D3B94EC208F53 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = "<group>"; }; | |
| 535 | + 2C68FD0A33D48BF8511F5E1F0AF5F38C /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = "<group>"; }; | |
| 560 | 536 | 2C71F70A09014858351E0D2BA6885014 /* YYWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYWebImageManager.h; path = YYKit/Image/YYWebImageManager.h; sourceTree = "<group>"; }; |
| 561 | 537 | 2CC0CE9E8F82738D36611F6084F5F9C8 /* YYTextKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextKeyboardManager.h; path = YYKit/Text/Component/YYTextKeyboardManager.h; sourceTree = "<group>"; }; |
| 562 | 538 | 2D2677C218E3A46355C345D95E7DE293 /* YBImageBrowser_DSCnliveShop-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YBImageBrowser_DSCnliveShop-Info.plist"; sourceTree = "<group>"; }; |
| 563 | - 2DC1F761B34C39B4907D5DB70157ABFC /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = "<group>"; }; | |
| 564 | 539 | 2DEA694BF89E27C54D37D6453687E87A /* NSObject+YBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSObject+YBImageBrowser.h"; sourceTree = "<group>"; }; |
| 565 | 540 | 2DEB9108C68D52B1B6E58D88118E1BCA /* YBIBImageScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBImageScrollView.m; sourceTree = "<group>"; }; |
| 566 | - 2DED8461605A23446E943D5B44AC07FB /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = "<group>"; }; | |
| 567 | - 2E02A020962AA8A983BE9DEF489D5CC5 /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = "<group>"; }; | |
| 541 | + 2E14AFE886371F80BB03C9261CAE653A /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = "<group>"; }; | |
| 568 | 542 | 2FA8DD8E17F9BA15127FBA5142430978 /* YBImageBrowser_DSCnliveShop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YBImageBrowser_DSCnliveShop.release.xcconfig; sourceTree = "<group>"; }; |
| 569 | - 2FBBBA584888406A53BBAB4C8E646119 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = "<group>"; }; | |
| 543 | + 2FB82601936A52D10C46ABDED4C4D68E /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = "<group>"; }; | |
| 544 | + 2FD9BD14816B4B34D6B032B14FCBCD17 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = "<group>"; }; | |
| 570 | 545 | 305596E45FD137D2410A689DD199F532 /* YBIBScreenRotationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBScreenRotationHandler.m; sourceTree = "<group>"; }; |
| 571 | 546 | 30A5E7177537475E2A71D3D8A0E4C58F /* YBImageBrowser_DSCnliveShop-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser_DSCnliveShop-umbrella.h"; sourceTree = "<group>"; }; |
| 572 | - 3103E35D6924D70FC117A1BFA21077C8 /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = "<group>"; }; | |
| 573 | 547 | 3236EA97B14313391E71CA2593DBB697 /* YBImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBImage.m; sourceTree = "<group>"; }; |
| 574 | 548 | 327DD14828A174C897406BB7ACBB30E7 /* YBIBImageCache+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBIBImageCache+Internal.h"; sourceTree = "<group>"; }; |
| 575 | 549 | 32AA9B50FD45F8829F9B21411363EC98 /* Pods-YBImageBrowser_DSCnliveShop_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-YBImageBrowser_DSCnliveShop_Example.debug.xcconfig"; sourceTree = "<group>"; }; |
| ... | ... | @@ -578,169 +552,162 @@ |
| 578 | 552 | 33DBCD81CD9E79FBDBDD1041BC653A17 /* YBIBCopywriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBCopywriter.m; sourceTree = "<group>"; }; |
| 579 | 553 | 33F8253486294181F468179983E49503 /* YBIBUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBUtilities.h; sourceTree = "<group>"; }; |
| 580 | 554 | 34FA97BD63CC23B9293C28CC94F1935E /* YBIBScreenRotationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBScreenRotationHandler.h; sourceTree = "<group>"; }; |
| 555 | + 35974735D558DD140EC7A519306676BF /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = "<group>"; }; | |
| 581 | 556 | 364A01FADBC877C6C8BC0B9E72655651 /* Pods-YBImageBrowser_DSCnliveShop_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-YBImageBrowser_DSCnliveShop_Tests.modulemap"; sourceTree = "<group>"; }; |
| 582 | - 36C8C2D7C7ACA9C26136F7A7D1154082 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = "<group>"; }; | |
| 583 | 557 | 36E435B666CD79060C4FCDA32BA104A7 /* NSDictionary+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+YYAdd.m"; path = "YYKit/Base/Foundation/NSDictionary+YYAdd.m"; sourceTree = "<group>"; }; |
| 584 | 558 | 375D9DE1B1D8EB4B9968FB74F25DE792 /* YBIBImageLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBImageLayout.m; sourceTree = "<group>"; }; |
| 585 | - 3937A5FCAE6FD5C9CBFD132D61702EB0 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = "<group>"; }; | |
| 586 | 559 | 39721DF1E2941C5B4B819BD85F2AA60E /* NSNotificationCenter+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNotificationCenter+YYAdd.m"; path = "YYKit/Base/Foundation/NSNotificationCenter+YYAdd.m"; sourceTree = "<group>"; }; |
| 587 | - 3A20F815CD4F1A80CA68C34C3039D331 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = "<group>"; }; | |
| 588 | - 3AEC8F623A6884FBFC7CF8D4309918D7 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = "<group>"; }; | |
| 560 | + 397498F9C1EC4E17B000928E2E9A2551 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; }; | |
| 561 | + 3977DF74625040A3E0128C656F9FA8D0 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = "<group>"; }; | |
| 562 | + 3BAFBDA5FBFB046872240DAA694DBA9D /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = "<group>"; }; | |
| 589 | 563 | 3BDA601294E211EE3B9CBED6DC267A5E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; |
| 590 | - 3C016044B645AE229C947C4E2E37F78B /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = "<group>"; }; | |
| 591 | - 3C7A36D864638BFBD8FEE3A451FAC9B3 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = "<group>"; }; | |
| 592 | - 3CA0E2F59E86C22963A7F42A601D4D9D /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = "<group>"; }; | |
| 564 | + 3C89C4C20801869E17ED28D5BC0002C7 /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = "<group>"; }; | |
| 593 | 565 | 3CE22FC473D05C3D81125FB08264318F /* NSTimer+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTimer+YYAdd.h"; path = "YYKit/Base/Foundation/NSTimer+YYAdd.h"; sourceTree = "<group>"; }; |
| 594 | 566 | 3D190164465C91A9309173CCE20C5764 /* YYTextEffectWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextEffectWindow.h; path = YYKit/Text/Component/YYTextEffectWindow.h; sourceTree = "<group>"; }; |
| 595 | 567 | 3D83880B681055CB94822859FFC3C2B6 /* UIDevice+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIDevice+YYAdd.m"; path = "YYKit/Base/UIKit/UIDevice+YYAdd.m"; sourceTree = "<group>"; }; |
| 596 | 568 | 3E04E2554A40CC109E87A30B4F4F3587 /* Pods-YBImageBrowser_DSCnliveShop_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-YBImageBrowser_DSCnliveShop_Example.modulemap"; sourceTree = "<group>"; }; |
| 597 | - 3E74798ACDDA5B166130859C04575723 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = "<group>"; }; | |
| 598 | 569 | 3F544E13A1E9FD128E0AF79DBF99E602 /* Pods-YBImageBrowser_DSCnliveShop_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-YBImageBrowser_DSCnliveShop_Example.release.xcconfig"; sourceTree = "<group>"; }; |
| 599 | - 3F7D6860C305EDC74687492EDEFC2325 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = "<group>"; }; | |
| 570 | + 3F679F8EE0717580BF2DF10529B314ED /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = "<group>"; }; | |
| 600 | 571 | 410FD0E1E2173C4AFCCB371FC6932374 /* YYFrameImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYFrameImage.h; path = YYKit/Image/YYFrameImage.h; sourceTree = "<group>"; }; |
| 601 | - 4294BEEA87AE1F76B25087B05E8A9958 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = "<group>"; }; | |
| 572 | + 42406C450631485B971273EE79B37A12 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = "<group>"; }; | |
| 602 | 573 | 431B4699FDBDE9286754313242740273 /* Pods-YBImageBrowser_DSCnliveShop_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-YBImageBrowser_DSCnliveShop_Tests-acknowledgements.markdown"; sourceTree = "<group>"; }; |
| 603 | 574 | 43D073BDA908719B072B9A52BECCED3D /* NSBundle+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+YYAdd.h"; path = "YYKit/Base/Foundation/NSBundle+YYAdd.h"; sourceTree = "<group>"; }; |
| 604 | - 4423F2AF5E01BBBB5F27784F5DA57247 /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = "<group>"; }; | |
| 605 | 575 | 44A8AA845C7A4050F81BBFEC526B2B62 /* Pods-YBImageBrowser_DSCnliveShop_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-YBImageBrowser_DSCnliveShop_Example-dummy.m"; sourceTree = "<group>"; }; |
| 606 | 576 | 4509C09CF0DD15FBEB1EAF90400333B3 /* YYTextParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextParser.h; path = YYKit/Text/String/YYTextParser.h; sourceTree = "<group>"; }; |
| 577 | + 4532E0D4D1C1FCB630416F347E791110 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = "<group>"; }; | |
| 578 | + 45487E9C2D9132F54E6DD142FDADCBAF /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = "<group>"; }; | |
| 607 | 579 | 45819A3D4F8AF3FCF1D0D1AF84EADC51 /* YBIBLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBLoadingView.m; sourceTree = "<group>"; }; |
| 580 | + 458C3BA863BEC4A0D1766E7096A16EF8 /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = "<group>"; }; | |
| 581 | + 45EBF80603A6BB114FFDF460A6A20CC7 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = "<group>"; }; | |
| 608 | 582 | 4600030B461C937CF76ADA334E8D6F1B /* YBIBCollectionViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBCollectionViewLayout.h; sourceTree = "<group>"; }; |
| 609 | 583 | 4625B897D5EC65459B29737D53744D1B /* Pods-YBImageBrowser_DSCnliveShop_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-YBImageBrowser_DSCnliveShop_Example-Info.plist"; sourceTree = "<group>"; }; |
| 610 | - 467332BA4DF047A604E2AD170D2A9A6C /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = "<group>"; }; | |
| 611 | 584 | 47EBB445DD9ED1E0006BD00439ED755A /* YYSentinel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYSentinel.h; path = YYKit/Utility/YYSentinel.h; sourceTree = "<group>"; }; |
| 612 | - 491254BCC101B0465D55540272375AB3 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = "<group>"; }; | |
| 585 | + 480531E7E6576BA8EBC67D80A2410524 /* NSBezierPath+RoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+RoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+RoundedCorners.h"; sourceTree = "<group>"; }; | |
| 613 | 586 | 49508D684CC827AE070DD761E831114F /* YYFrameImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYFrameImage.m; path = YYKit/Image/YYFrameImage.m; sourceTree = "<group>"; }; |
| 614 | - 4A1019E03A5B1C662AEA03A27BAD9451 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = "<group>"; }; | |
| 615 | - 4B31C91F7BAC29DAB475F9F033793951 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = "<group>"; }; | |
| 616 | 587 | 4B993C46E9B43AF9AE34EE10D6399802 /* DSYBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSYBImageBrowser.h; path = YBImageBrowser_DSCnliveShop/Classes/DSYBImageBrowser.h; sourceTree = "<group>"; }; |
| 617 | - 4C8603634C14CA0EB02BA831268B0C10 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = "<group>"; }; | |
| 588 | + 4C86D29287795201B7A91BA858DBC2FB /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = "<group>"; }; | |
| 618 | 589 | 4D09FF329509C51C099F07C2BA4EF7A6 /* NSData+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+YYAdd.h"; path = "YYKit/Base/Foundation/NSData+YYAdd.h"; sourceTree = "<group>"; }; |
| 619 | - 4D6746DFA44B1641AE23A50377370530 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = "<group>"; }; | |
| 620 | - 4EB5FC7AFB1E5240D21A6FE7DF89E87C /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = "<group>"; }; | |
| 621 | - 4F30AC9537E6584F35D8DD4C10EDB7B1 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = "<group>"; }; | |
| 590 | + 4D82E5E2C22405F57D03467E23EA118F /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = "<group>"; }; | |
| 591 | + 4E907072812DC6E02160321606CBFFD2 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; }; | |
| 592 | + 4EB6A999880D99C4B8EAE70EC4D73221 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = "<group>"; }; | |
| 622 | 593 | 4F8E8FC3A2C5BD919F913AD5ED4E1EAC /* YYKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YYKit-dummy.m"; sourceTree = "<group>"; }; |
| 623 | - 507EA85A920020FD53FDF4A254A318F9 /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = "<group>"; }; | |
| 624 | 594 | 50E241CBBD2EF97B17ECA31FEAF181E7 /* UIBarButtonItem+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+YYAdd.h"; path = "YYKit/Base/UIKit/UIBarButtonItem+YYAdd.h"; sourceTree = "<group>"; }; |
| 625 | 595 | 517A0A3DCA0C56126084B689FBE105E9 /* YYTextRubyAnnotation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextRubyAnnotation.m; path = YYKit/Text/String/YYTextRubyAnnotation.m; sourceTree = "<group>"; }; |
| 596 | + 523A9DF244F75BFD8EF7183295D79237 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = "<group>"; }; | |
| 626 | 597 | 52A857F7C6A4B03E17C6CC6873436387 /* _YYWebImageSetter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _YYWebImageSetter.m; path = YYKit/Image/Categories/_YYWebImageSetter.m; sourceTree = "<group>"; }; |
| 627 | 598 | 52B62F0134660F292CE152D8E39947BD /* YBIBVideoCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBVideoCell.h; sourceTree = "<group>"; }; |
| 628 | 599 | 52BE96D687228A93E19263F07010C4F8 /* NSObject+YYAddForKVO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YYAddForKVO.h"; path = "YYKit/Base/Foundation/NSObject+YYAddForKVO.h"; sourceTree = "<group>"; }; |
| 629 | 600 | 5356E679669AF6B1D86C87ED02DE9228 /* YBIBImageData+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBIBImageData+Internal.h"; sourceTree = "<group>"; }; |
| 630 | - 54932F1D65D4CE3969AD7014585252E6 /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = "<group>"; }; | |
| 631 | - 5566B7FA1592DB68F47F538060773A34 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = "<group>"; }; | |
| 632 | - 5573ECAD013B67C3DCA80D7EFBDE031B /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = "<group>"; }; | |
| 633 | 601 | 55FA14C2DEAB1ED0438F36B2AF930CC1 /* YYClassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYClassInfo.h; path = YYKit/Model/YYClassInfo.h; sourceTree = "<group>"; }; |
| 634 | 602 | 563F4DAD613D6C00571FC9D44766124D /* YYImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImageCoder.m; path = YYKit/Image/YYImageCoder.m; sourceTree = "<group>"; }; |
| 635 | - 57001503938AEFE09B39A90CD56CF65A /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = "<group>"; }; | |
| 603 | + 565EA3FF9DE0069950D12760CD92E6DF /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = "<group>"; }; | |
| 636 | 604 | 57078E9B88965F537213B04FEDA909B2 /* YYTextAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextAttribute.h; path = YYKit/Text/String/YYTextAttribute.h; sourceTree = "<group>"; }; |
| 637 | 605 | 57EF9F7EACD9A4EA29C6C7519AC29E42 /* YYThreadSafeDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYThreadSafeDictionary.m; path = YYKit/Utility/YYThreadSafeDictionary.m; sourceTree = "<group>"; }; |
| 606 | + 5820AFD9CB1F531DEEEA85AE53BA9FB1 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = "<group>"; }; | |
| 638 | 607 | 586579D8B562F5F100F35D60CADAF40B /* CALayer+YYWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+YYWebImage.h"; path = "YYKit/Image/Categories/CALayer+YYWebImage.h"; sourceTree = "<group>"; }; |
| 639 | 608 | 5A4D5229E0CA5F30FA43F226DA32F462 /* CALayer+YYWebImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+YYWebImage.m"; path = "YYKit/Image/Categories/CALayer+YYWebImage.m"; sourceTree = "<group>"; }; |
| 640 | 609 | 5B19431AF11994E0CA59423A7DAE3628 /* YYAsyncLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYAsyncLayer.h; path = YYKit/Utility/YYAsyncLayer.h; sourceTree = "<group>"; }; |
| 641 | 610 | 5C1FEAA05AC81F62B91CF98EA70351DD /* YBIBSentinel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBSentinel.h; sourceTree = "<group>"; }; |
| 642 | - 5D239E8639A886939B6B5EB58FC27342 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = "<group>"; }; | |
| 643 | - 5DD0F8422DC31BC404DEB779AA5DB139 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = "<group>"; }; | |
| 644 | - 5E05A254217112511844A5ABAEA26D88 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = "<group>"; }; | |
| 611 | + 5E4DCEAC007F7F72A2323A6304B0F4A4 /* UIColor+HexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+HexString.h"; path = "SDWebImage/Private/UIColor+HexString.h"; sourceTree = "<group>"; }; | |
| 612 | + 5E7D951E27DDF1D0327C691AC350863B /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = "<group>"; }; | |
| 645 | 613 | 5E84B87FDA9D2897071CB2718674F9C6 /* YBImageBrowser_DSCnliveShop.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YBImageBrowser_DSCnliveShop.framework; path = YBImageBrowser_DSCnliveShop.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 646 | - 6016CD6764077B1F107BD22483AA7D14 /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = "<group>"; }; | |
| 647 | - 608E04456BC00743986E00E4A8181EA3 /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = "<group>"; }; | |
| 614 | + 604FBD4A36B51CB23593D6E7144E0A66 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = "<group>"; }; | |
| 615 | + 6076834A27CA897C42FFDA170BDE4715 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = "<group>"; }; | |
| 648 | 616 | 60FC5BFD7F334913232A59633DEE5138 /* YBIBDefaultWebImageMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBDefaultWebImageMediator.m; sourceTree = "<group>"; }; |
| 649 | 617 | 6107B507ED75C5E7304F9AE9131E04CB /* YYWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYWeakProxy.m; path = YYKit/Utility/YYWeakProxy.m; sourceTree = "<group>"; }; |
| 650 | - 615E0DE04702B1FE637909AB79E77479 /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = "<group>"; }; | |
| 651 | - 615E844CC98D96DCD6F0EFE36CFF13BF /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = "<group>"; }; | |
| 652 | - 61733D38B2BF61692321B0EAD6CE7AAC /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = "<group>"; }; | |
| 653 | 618 | 618A21680667BDF2F6B320EC659C0C8A /* YBIBAuxiliaryViewHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBAuxiliaryViewHandler.m; sourceTree = "<group>"; }; |
| 654 | - 618EA55D0CE2B6CFE74715E49A256295 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = "<group>"; }; | |
| 619 | + 631A43488B8C087EA660030CD2484EA9 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = "<group>"; }; | |
| 655 | 620 | 638CD74411415C9BD0B7940010462593 /* CALayer+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+YYAdd.h"; path = "YYKit/Base/Quartz/CALayer+YYAdd.h"; sourceTree = "<group>"; }; |
| 656 | 621 | 64533B43DC32C38326C2FB11D3FB17D6 /* YYKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YYKit-Info.plist"; sourceTree = "<group>"; }; |
| 657 | - 64D193C84163B92004E21BE9A8A13B71 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = "<group>"; }; | |
| 658 | - 657DCFEE5B399779371CC2AC2AAAA206 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = "<group>"; }; | |
| 622 | + 645FAD055E96DC89E3CF7A287A4B4F87 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = "<group>"; }; | |
| 659 | 623 | 65851769AB362F92EB866E5610C88E6C /* Pods-YBImageBrowser_DSCnliveShop_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-YBImageBrowser_DSCnliveShop_Tests-dummy.m"; sourceTree = "<group>"; }; |
| 624 | + 662B362504EE532B6C5EAA6DEDDC5D23 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = "<group>"; }; | |
| 660 | 625 | 666CEBB485FC6B4BC1861FC6F4EE5093 /* YYTextContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextContainerView.m; path = YYKit/Text/Component/YYTextContainerView.m; sourceTree = "<group>"; }; |
| 661 | 626 | 666F2A06D9CC71D500B577D3F48163AF /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; |
| 662 | 627 | 670ED4D099B5B4C894DE0935874915F0 /* UIControl+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIControl+YYAdd.h"; path = "YYKit/Base/UIKit/UIControl+YYAdd.h"; sourceTree = "<group>"; }; |
| 663 | - 6721C57EE2049316FC7DFA0EC2F61B33 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = "<group>"; }; | |
| 628 | + 6821ACBD9902AD3AEC5766052616BEFC /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = "<group>"; }; | |
| 664 | 629 | 68D2A3CB6FA504A7585BD0C033C2860D /* YBIBDefaultWebImageMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBDefaultWebImageMediator.h; sourceTree = "<group>"; }; |
| 665 | - 69B6E48A6A7BF7FDA397F18D808442A2 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = "<group>"; }; | |
| 666 | 630 | 6A08FF9357329D825160ABB1311027C9 /* UIBezierPath+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBezierPath+YYAdd.m"; path = "YYKit/Base/UIKit/UIBezierPath+YYAdd.m"; sourceTree = "<group>"; }; |
| 667 | 631 | 6A25BC91CE33678DD088B666A283A44A /* UIDevice+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIDevice+YYAdd.h"; path = "YYKit/Base/UIKit/UIDevice+YYAdd.h"; sourceTree = "<group>"; }; |
| 668 | 632 | 6A37969EF9EE0C673EADF254ACD0FE1C /* UIFont+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+YYAdd.h"; path = "YYKit/Base/UIKit/UIFont+YYAdd.h"; sourceTree = "<group>"; }; |
| 669 | - 6DB88B001512FB115B60C0A194FAB687 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = "<group>"; }; | |
| 633 | + 6BF16A9C9A9AF5DDC141A40D41D0467E /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = "<group>"; }; | |
| 634 | + 6C25A06B05CE4932A05E03D9A5B91E1A /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = "<group>"; }; | |
| 635 | + 6E0438EB685599B92473E4BBB56C9271 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = "<group>"; }; | |
| 670 | 636 | 6F091181C07B3942FF0C12310A2FD678 /* YYThreadSafeDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYThreadSafeDictionary.h; path = YYKit/Utility/YYThreadSafeDictionary.h; sourceTree = "<group>"; }; |
| 671 | 637 | 6F3722F221BDAC94870B0E9231FE44B7 /* YYTextContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextContainerView.h; path = YYKit/Text/Component/YYTextContainerView.h; sourceTree = "<group>"; }; |
| 672 | - 7025B67B4A01BBCCCFB1958DC25846D2 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = "<group>"; }; | |
| 673 | - 7136C53C3E86DF97021DEAC46C3AF414 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = "<group>"; }; | |
| 674 | - 71AEC717DE657C306DC4220359875899 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = "<group>"; }; | |
| 638 | + 6F4A5B2FFD435932DC069C91BA243B8A /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = "<group>"; }; | |
| 639 | + 6F7A1C78766D1A651D4233A02DFD21C1 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = "<group>"; }; | |
| 675 | 640 | 7310856B16CA1367B57B8768F5EBC3E9 /* YBIBImageLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBImageLayout.h; sourceTree = "<group>"; }; |
| 676 | 641 | 7355C552B642A7D227CB76CDCD03E2F8 /* NSNumber+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+YYAdd.m"; path = "YYKit/Base/Foundation/NSNumber+YYAdd.m"; sourceTree = "<group>"; }; |
| 677 | 642 | 73F109F39280C7548AA77C244ED5675B /* YBIBDataProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBDataProtocol.h; sourceTree = "<group>"; }; |
| 643 | + 7492D3D26ACA17BE066949BC5402EFA6 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = "<group>"; }; | |
| 644 | + 74C01AF8051358A2AD340A5AB3505F28 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = "<group>"; }; | |
| 678 | 645 | 74C9F42DE0F28AF77F3789C8BD0F8A78 /* YYTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTransaction.h; path = YYKit/Utility/YYTransaction.h; sourceTree = "<group>"; }; |
| 679 | 646 | 74CE5CC75231FB5BA4F8EB1071D6A3B3 /* YBIBCollectionViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBCollectionViewLayout.m; sourceTree = "<group>"; }; |
| 680 | 647 | 75DDFEB8B1AD695874CDD5C0116D3C02 /* YYKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYKit-umbrella.h"; sourceTree = "<group>"; }; |
| 681 | - 77BDAC0316DE945EDC00877B001E3F13 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = "<group>"; }; | |
| 682 | 648 | 78025E79C159D1B545ECE0DBDCA36B66 /* Pods-YBImageBrowser_DSCnliveShop_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-YBImageBrowser_DSCnliveShop_Example-acknowledgements.markdown"; sourceTree = "<group>"; }; |
| 683 | 649 | 780BD6CD409902FCCA79E07B8449B0DB /* YBIBAnimatedTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBAnimatedTransition.h; sourceTree = "<group>"; }; |
| 684 | 650 | 784B89EF43D57599270D1491D222B2BF /* YYReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYReachability.h; path = YYKit/Utility/YYReachability.h; sourceTree = "<group>"; }; |
| 685 | 651 | 78B7E54CA0E5B57763E180DBA69E47AF /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; |
| 686 | 652 | 78C427ED00AF6FA74B7F70468B7F9537 /* YBImageBrowserVideo.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = YBImageBrowserVideo.bundle; path = YBImageBrowser_DSCnliveShop/Assets/YBImageBrowserVideo.bundle; sourceTree = "<group>"; }; |
| 653 | + 78D88E09C574752B379AC19B8561A84F /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = "<group>"; }; | |
| 687 | 654 | 7975F0485F6C6908DD6A4D47F50E9D35 /* YYTextArchiver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextArchiver.m; path = YYKit/Text/String/YYTextArchiver.m; sourceTree = "<group>"; }; |
| 688 | 655 | 7A2AD834B988AB862338A88298281712 /* YBImageBrowser.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = YBImageBrowser.bundle; path = YBImageBrowser_DSCnliveShop/Assets/YBImageBrowser.bundle; sourceTree = "<group>"; }; |
| 656 | + 7A3758E1F2262F48C18DEA44579E7F23 /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = "<group>"; }; | |
| 689 | 657 | 7B4A7C95058000CD832DBF4537DCFBA4 /* YYTextLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextLayout.m; path = YYKit/Text/Component/YYTextLayout.m; sourceTree = "<group>"; }; |
| 690 | 658 | 7BE5EE0D085B4C8EE2CDD27B25526D0D /* YYTextLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextLayout.h; path = YYKit/Text/Component/YYTextLayout.h; sourceTree = "<group>"; }; |
| 691 | - 7CA02462DD9F35B55FD8C20DC0A0CDBC /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = "<group>"; }; | |
| 692 | - 7E26822C5FA7DDEE80076B4E7C2728A9 /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = "<group>"; }; | |
| 659 | + 7DC9E6937FC0DCAFBFE9BC1CC778D6C9 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = "<group>"; }; | |
| 693 | 660 | 7E3CBF57D127E6A6C4FD252662C1ADC0 /* YYImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImage.h; path = YYKit/Image/YYImage.h; sourceTree = "<group>"; }; |
| 694 | - 7EA2BCD717BF8B6108E49F1344996DCF /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = "<group>"; }; | |
| 695 | 661 | 7F0147BF35758A94C20B1F24F24622BB /* NSNumber+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+YYAdd.h"; path = "YYKit/Base/Foundation/NSNumber+YYAdd.h"; sourceTree = "<group>"; }; |
| 696 | 662 | 7F0A032626FFA7C226DF55204CF32C5A /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreImage.framework; sourceTree = DEVELOPER_DIR; }; |
| 697 | - 7F204DC3ADE5CAA2617773E3A9EFDDBB /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = "<group>"; }; | |
| 698 | 663 | 80A4A26F23AC2E0F4F5EBC0F4B53543D /* YBIBDataMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBDataMediator.h; sourceTree = "<group>"; }; |
| 664 | + 81C7DA27208415129BC75A3AE0EC610D /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = "<group>"; }; | |
| 699 | 665 | 826A0D9FB100D729C86AB5FF081F6521 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; |
| 700 | - 82CFF2AD22CF5568454DF140CCC1FBC4 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = "<group>"; }; | |
| 666 | + 82DA1AE31B883B0A558F1A7C451C5411 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = "<group>"; }; | |
| 667 | + 843DE7A9D5751B6D1E4B542142E88BE5 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = "<group>"; }; | |
| 701 | 668 | 8475110C42C3E42DC61F264C6BE773D6 /* YYFileHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYFileHash.m; path = YYKit/Utility/YYFileHash.m; sourceTree = "<group>"; }; |
| 702 | 669 | 849AFCF98DA4C75651F5D475A19348D0 /* YBIBImageCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBImageCell.m; sourceTree = "<group>"; }; |
| 670 | + 85323CE74E87D9048ABFE6CB1D80BCB5 /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = "<group>"; }; | |
| 703 | 671 | 854385CF82D745F34597998325666C1D /* YYTextDebugOption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextDebugOption.h; path = YYKit/Text/Component/YYTextDebugOption.h; sourceTree = "<group>"; }; |
| 704 | - 8582059F08F05B024B1E63DB97E6FC3D /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = "<group>"; }; | |
| 705 | - 8811346772E1C5599090A46F4A2D8681 /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = "<group>"; }; | |
| 706 | - 885401F9AE5B59CB193871CFBB1551CC /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = "<group>"; }; | |
| 672 | + 880ED7B5A8CB58EE4EE46F97AAFC7934 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = "<group>"; }; | |
| 707 | 673 | 88B3D662CF91D27FFEF32389911E85D0 /* UIImage+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+YYAdd.m"; path = "YYKit/Base/UIKit/UIImage+YYAdd.m"; sourceTree = "<group>"; }; |
| 674 | + 88B758940E94222028625182D6DD5C48 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = "<group>"; }; | |
| 708 | 675 | 88CA615592156E78420567B5D69F5B66 /* YYTextMagnifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextMagnifier.h; path = YYKit/Text/Component/YYTextMagnifier.h; sourceTree = "<group>"; }; |
| 709 | 676 | 89E1C94E51AFCA8ADEB14A14D7E5C910 /* YYTextRunDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextRunDelegate.h; path = YYKit/Text/String/YYTextRunDelegate.h; sourceTree = "<group>"; }; |
| 710 | 677 | 8B249154A723FBC9D15D68C5DBE38A9D /* YBImageBrowser_DSCnliveShop.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = YBImageBrowser_DSCnliveShop.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; |
| 711 | 678 | 8B4FF6780DBBE60AA8EAACC09BD33F72 /* Pods-YBImageBrowser_DSCnliveShop_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-YBImageBrowser_DSCnliveShop_Tests-umbrella.h"; sourceTree = "<group>"; }; |
| 712 | - 8D17D294A9F7DCF9895D5A3337D8B886 /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = "<group>"; }; | |
| 679 | + 8B5C5257F6B18F69C086B439A25052BD /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = "<group>"; }; | |
| 680 | + 8C0EBBBE53B935FF0453555166C8BD82 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = "<group>"; }; | |
| 681 | + 8D082DCD13F9572880B69B6E5DBA621E /* UIColor+HexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+HexString.m"; path = "SDWebImage/Private/UIColor+HexString.m"; sourceTree = "<group>"; }; | |
| 682 | + 8D8872339E7C6C556DCFC2B144D97747 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = "<group>"; }; | |
| 683 | + 8DE00CB7B46BD9384E27CFF44A22F3D6 /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = "<group>"; }; | |
| 713 | 684 | 8DF359196C08E19807F14F0B35AC0E0C /* YBIBVideoData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBVideoData.m; sourceTree = "<group>"; }; |
| 714 | 685 | 8E1DF05D31C52BDD36D3C352B6D38143 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; |
| 715 | - 8EADB1874F009D5810228B521E808F8C /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = "<group>"; }; | |
| 716 | - 8F0B0EB007B67E5D110E4AA7E75CC5E8 /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = "<group>"; }; | |
| 717 | - 8F25D99C7ED5F7ECE058950E756B815B /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = "<group>"; }; | |
| 718 | 686 | 90A4B22BA3CB13452A0C80DA86A84A42 /* YYCGUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYCGUtilities.h; path = YYKit/Base/Quartz/YYCGUtilities.h; sourceTree = "<group>"; }; |
| 719 | 687 | 9126743F263F9F3BED4DDDB5EFF3F2C8 /* YYTextArchiver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextArchiver.h; path = YYKit/Text/String/YYTextArchiver.h; sourceTree = "<group>"; }; |
| 720 | 688 | 91553D071AF4EB06E69E3698FC4BBB17 /* YYKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYKit-prefix.pch"; sourceTree = "<group>"; }; |
| 721 | - 91C17D860CA95052284F7C9198001DC9 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = "<group>"; }; | |
| 722 | - 92D743407EFB5C298F8E9856F618DE87 /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = "<group>"; }; | |
| 689 | + 9190FDE4BAFCFE9EEEC32C362D54FC14 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = "<group>"; }; | |
| 690 | + 92986682144C6A680D1688CC72DB03EB /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = "<group>"; }; | |
| 723 | 691 | 9387B514E9488C1E4C98357D42D4112E /* NSBundle+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+YYAdd.m"; path = "YYKit/Base/Foundation/NSBundle+YYAdd.m"; sourceTree = "<group>"; }; |
| 724 | 692 | 9505B72CDB9E287780696B552708241D /* MKAnnotationView+YYWebImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MKAnnotationView+YYWebImage.m"; path = "YYKit/Image/Categories/MKAnnotationView+YYWebImage.m"; sourceTree = "<group>"; }; |
| 693 | + 95D767BEAA3A22D8C4B4F881F593EA55 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = "<group>"; }; | |
| 725 | 694 | 95F7B5AB059394D73D87262D3556EB78 /* YYDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYDiskCache.m; path = YYKit/Cache/YYDiskCache.m; sourceTree = "<group>"; }; |
| 726 | 695 | 96371E9C734320A546704E45E02ED3DE /* YBIBTopView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBTopView.m; sourceTree = "<group>"; }; |
| 727 | - 968801418C5808212099C7AAECFD942F /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = "<group>"; }; | |
| 728 | 696 | 96B1B4E18C7313B870A3AECA294EED03 /* NSTimer+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTimer+YYAdd.m"; path = "YYKit/Base/Foundation/NSTimer+YYAdd.m"; sourceTree = "<group>"; }; |
| 729 | 697 | 97A38E03511200872A6CE102D312DA97 /* YBIBImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBImageCache.m; sourceTree = "<group>"; }; |
| 730 | 698 | 98AD2B257D836F916F990B6EA6B2E153 /* YBIBImageData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBImageData.m; sourceTree = "<group>"; }; |
| 731 | - 9915D39521761F821273ED4AD94F462B /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = "<group>"; }; | |
| 732 | - 9998D272F6C21B92ECDBCC87B232F260 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; }; | |
| 699 | + 994DDB7514B65007DB23743EE9419955 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = "<group>"; }; | |
| 733 | 700 | 99C3520C09D1B40E7E268FF0D9C55D3A /* NSAttributedString+YYText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+YYText.m"; path = "YYKit/Text/String/NSAttributedString+YYText.m"; sourceTree = "<group>"; }; |
| 701 | + 9A2C5A33CC842DF0109E16A40FED6D58 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = "<group>"; }; | |
| 734 | 702 | 9AD92986443124E1DCE997385B496FB7 /* YBIBIconManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBIconManager.m; sourceTree = "<group>"; }; |
| 735 | 703 | 9AF2E5796402740EB5340B609872DBEA /* YYMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYMemoryCache.h; path = YYKit/Cache/YYMemoryCache.h; sourceTree = "<group>"; }; |
| 736 | - 9B17144987DDC3673503BAA63081322E /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = "<group>"; }; | |
| 737 | - 9B374325A4827DE6AA8D86E8A4CA0C0E /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = "<group>"; }; | |
| 704 | + 9B69A0F6649EAEED316A983843ED5614 /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = "<group>"; }; | |
| 738 | 705 | 9B794942CBB5B6C0D1CF9F241EB18B3C /* YBIBUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBUtilities.m; sourceTree = "<group>"; }; |
| 739 | 706 | 9BB872492D04CC4C2B83ACB1537BCB51 /* YYTextSelectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextSelectionView.h; path = YYKit/Text/Component/YYTextSelectionView.h; sourceTree = "<group>"; }; |
| 740 | 707 | 9D38FB225790DDA600C42DF52D9CC17F /* NSObject+YYAddForARC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YYAddForARC.m"; path = "YYKit/Base/Foundation/NSObject+YYAddForARC.m"; sourceTree = "<group>"; }; |
| 708 | + 9D4F696743A974B8507BEF6FB323BB62 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = "<group>"; }; | |
| 741 | 709 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; |
| 742 | 710 | 9DBD9F3341AE38C875BBD42C62516B07 /* YBIBVideoActionBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBVideoActionBar.m; sourceTree = "<group>"; }; |
| 743 | - 9DD82D69E6F6CA677C0FD0DB1910BEEB /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = "<group>"; }; | |
| 744 | 711 | 9DE54B8C45B333743F49C490C8A51D59 /* NSDate+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+YYAdd.h"; path = "YYKit/Base/Foundation/NSDate+YYAdd.h"; sourceTree = "<group>"; }; |
| 745 | 712 | 9E6FAD07C5929BC33D1A767B8226595D /* UIPasteboard+YYText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPasteboard+YYText.h"; path = "YYKit/Text/String/UIPasteboard+YYText.h"; sourceTree = "<group>"; }; |
| 746 | 713 | 9E718C6C13FF741C9062C0F849A452F2 /* YYTextLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextLine.h; path = YYKit/Text/Component/YYTextLine.h; sourceTree = "<group>"; }; |
| ... | ... | @@ -752,36 +719,35 @@ |
| 752 | 719 | A1341A583321F6A80299E2B2D53093F0 /* YBIBToolViewHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBToolViewHandler.h; sourceTree = "<group>"; }; |
| 753 | 720 | A177B060DEA91DB2671E9EACA4576579 /* YYTextKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextKeyboardManager.m; path = YYKit/Text/Component/YYTextKeyboardManager.m; sourceTree = "<group>"; }; |
| 754 | 721 | A182794A8F3D76711F0E02DA7FF03E94 /* UIGestureRecognizer+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIGestureRecognizer+YYAdd.m"; path = "YYKit/Base/UIKit/UIGestureRecognizer+YYAdd.m"; sourceTree = "<group>"; }; |
| 755 | - A1CF482AD1045FF137E38C654A5C5F0A /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = "<group>"; }; | |
| 756 | 722 | A27A22E1F51A515951549616C10A4D43 /* NSDate+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+YYAdd.m"; path = "YYKit/Base/Foundation/NSDate+YYAdd.m"; sourceTree = "<group>"; }; |
| 757 | 723 | A297B0A3BB16024B6497BE64883F91E7 /* YYAsyncLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYAsyncLayer.m; path = YYKit/Utility/YYAsyncLayer.m; sourceTree = "<group>"; }; |
| 758 | - A2B670A4915027A69D8298ABAE7832C5 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = "<group>"; }; | |
| 724 | + A2EE608D10670E27D666BCB148BE76A8 /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = "<group>"; }; | |
| 759 | 725 | A328158B7BDCD9B9A54D7D40774FCC54 /* YBIBAuxiliaryViewHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBAuxiliaryViewHandler.h; sourceTree = "<group>"; }; |
| 726 | + A3F033ABEC9F3EFAA01FDA65E76374B4 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = "<group>"; }; | |
| 727 | + A4015B1017950B192730F1ABF2793542 /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = "<group>"; }; | |
| 760 | 728 | A483F09FE887E66A6F02B7FCBE79F846 /* YBIBCellProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBCellProtocol.h; sourceTree = "<group>"; }; |
| 761 | 729 | A57EE7627E17C473032D3846ABCB164A /* YBIBToastView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBToastView.m; sourceTree = "<group>"; }; |
| 762 | 730 | A607C9A3CDD44ED7C4A717482C4D60A3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; |
| 763 | 731 | A76D4662C854612618E547F25B4B90A5 /* _YYWebImageSetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _YYWebImageSetter.h; path = YYKit/Image/Categories/_YYWebImageSetter.h; sourceTree = "<group>"; }; |
| 764 | - A788FE41CE72DC285C7E12274B2EEA45 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = "<group>"; }; | |
| 765 | - A7D134637245A1D1291AEBC7FA27654E /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = "<group>"; }; | |
| 766 | - A7D32E803217C60CD15496E8FBD13FDF /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = "<group>"; }; | |
| 767 | 732 | A84A5680B20A545C99B07392B9AA4B21 /* UIImageView+YYWebImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+YYWebImage.m"; path = "YYKit/Image/Categories/UIImageView+YYWebImage.m"; sourceTree = "<group>"; }; |
| 768 | - A86C89F5D3FD68F631C6AAB3E9FFDB67 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = "<group>"; }; | |
| 769 | 733 | A8AF070443791A87599C26E1E46E74B1 /* YBIBSheetView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBSheetView.m; sourceTree = "<group>"; }; |
| 770 | 734 | AA0DFD4E17C227B014108A94D20370E6 /* YBIBInteractionProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBInteractionProfile.m; sourceTree = "<group>"; }; |
| 735 | + AAF8FE9BD2DF30E81C73D0170BA7C814 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = "<group>"; }; | |
| 771 | 736 | AB96F3B4BB148DAF41FDE86DF14036F4 /* Pods-YBImageBrowser_DSCnliveShop_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-YBImageBrowser_DSCnliveShop_Example-frameworks.sh"; sourceTree = "<group>"; }; |
| 772 | 737 | AC5675312A245FA26DAC5D3DA60C6060 /* YYKitMacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYKitMacro.h; path = YYKit/Base/YYKitMacro.h; sourceTree = "<group>"; }; |
| 773 | 738 | ACB2C18C7F7569D6D85619691655DB76 /* YBIBPhotoAlbumManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBPhotoAlbumManager.h; sourceTree = "<group>"; }; |
| 774 | 739 | ACD89195E78715E8E03598ED048B1DB6 /* YBIBVideoTopBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBVideoTopBar.h; sourceTree = "<group>"; }; |
| 775 | 740 | ACDDD031AB39EE10A73CBCA382968C97 /* NSDictionary+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+YYAdd.h"; path = "YYKit/Base/Foundation/NSDictionary+YYAdd.h"; sourceTree = "<group>"; }; |
| 741 | + ACDF74FCCC69765D4B60B3DBEC369C3D /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = "<group>"; }; | |
| 742 | + AD998B4EBF0CD700BD542833326015DB /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = "<group>"; }; | |
| 743 | + AD9AD3087AA0C54D99784B1E96B8F385 /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = "<group>"; }; | |
| 776 | 744 | ADE583D4B2310B6AB0833BF354A6DC60 /* YBIBVideoActionBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBVideoActionBar.h; sourceTree = "<group>"; }; |
| 777 | 745 | AF18321586C240857382009824EBDB64 /* UIBezierPath+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBezierPath+YYAdd.h"; path = "YYKit/Base/UIKit/UIBezierPath+YYAdd.h"; sourceTree = "<group>"; }; |
| 778 | 746 | AF2571FC04AEBB0049E5DF97CA8CB9F1 /* NSAttributedString+YYText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+YYText.h"; path = "YYKit/Text/String/NSAttributedString+YYText.h"; sourceTree = "<group>"; }; |
| 779 | 747 | AF275D767348041345B5F9C14D9D9CA0 /* YYTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextView.h; path = YYKit/Text/YYTextView.h; sourceTree = "<group>"; }; |
| 780 | - AF3424AF58293B7AECCBA5ADAE1E90EB /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = "<group>"; }; | |
| 781 | 748 | AFB40C28BD8BD37F15B50CB7E6A20928 /* YBIBOperateBrowserProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBOperateBrowserProtocol.h; sourceTree = "<group>"; }; |
| 782 | 749 | AFF0F50B5FE26ED59651D7C8D462D48E /* YBIBDataMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBDataMediator.m; sourceTree = "<group>"; }; |
| 783 | 750 | B0715021BC19551B9A5D5CB2408E7E2B /* YYWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYWebImageOperation.m; path = YYKit/Image/YYWebImageOperation.m; sourceTree = "<group>"; }; |
| 784 | - B083F58677FB62CBAA120E34B5932133 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = "<group>"; }; | |
| 785 | 751 | B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 786 | 752 | B1A650BD7991FDA4D59B763DC0B897B5 /* NSObject+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YYAdd.h"; path = "YYKit/Base/Foundation/NSObject+YYAdd.h"; sourceTree = "<group>"; }; |
| 787 | 753 | B1F78325C1CF3117C990E0DBB1443AC4 /* YYTextRunDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextRunDelegate.m; path = YYKit/Text/String/YYTextRunDelegate.m; sourceTree = "<group>"; }; |
| ... | ... | @@ -794,145 +760,139 @@ |
| 794 | 760 | B4A1D7FB30E0B1322F08017865D3AED6 /* UIGestureRecognizer+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIGestureRecognizer+YYAdd.h"; path = "YYKit/Base/UIKit/UIGestureRecognizer+YYAdd.h"; sourceTree = "<group>"; }; |
| 795 | 761 | B5756A1321B21D96C7A1AE0F5C4285AB /* YYKVStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYKVStorage.m; path = YYKit/Cache/YYKVStorage.m; sourceTree = "<group>"; }; |
| 796 | 762 | B5AA17CCA3C4553252CF80AEF70404A8 /* YYTextUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextUtilities.m; path = YYKit/Text/String/YYTextUtilities.m; sourceTree = "<group>"; }; |
| 763 | + B5F772E2006AB9FCF216A22126D6D46F /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = "<group>"; }; | |
| 797 | 764 | B63F966DDF9161A1C29525E49D01A94F /* NSData+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+YYAdd.m"; path = "YYKit/Base/Foundation/NSData+YYAdd.m"; sourceTree = "<group>"; }; |
| 798 | 765 | B664849B9E38756422D4E0F139369652 /* UIScreen+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+YYAdd.m"; path = "YYKit/Base/UIKit/UIScreen+YYAdd.m"; sourceTree = "<group>"; }; |
| 799 | 766 | B693FD0CA179F7A03CC3787C32366CA7 /* YBIBCopywriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBCopywriter.h; sourceTree = "<group>"; }; |
| 800 | 767 | B70A20C0814370A0A1C72AE2E522CAEB /* UIBarButtonItem+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+YYAdd.m"; path = "YYKit/Base/UIKit/UIBarButtonItem+YYAdd.m"; sourceTree = "<group>"; }; |
| 801 | - B75EE1C0C625093DB3961800DCB992E6 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; }; | |
| 802 | 768 | B7C9B42ACA0B5782A356C5AE7A908B3F /* YBIBGetBaseInfoProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBGetBaseInfoProtocol.h; sourceTree = "<group>"; }; |
| 769 | + B836409E7407CD373408BBEE6FB78A56 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = "<group>"; }; | |
| 770 | + B93B5CB4F97B4C63233C9781D9074385 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = "<group>"; }; | |
| 803 | 771 | B9AB8CA329AC9F81339A2A1B4F0266FE /* YYFileHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYFileHash.h; path = YYKit/Utility/YYFileHash.h; sourceTree = "<group>"; }; |
| 804 | 772 | B9C280A5938040751695347877F4D8C2 /* YYSpriteSheetImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYSpriteSheetImage.m; path = YYKit/Image/YYSpriteSheetImage.m; sourceTree = "<group>"; }; |
| 805 | 773 | B9EF0789AEFDBB03D69E8BF132003277 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; |
| 806 | 774 | BAC4F1096AC0661BCC97A1690D41356F /* YYAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYAnimatedImageView.m; path = YYKit/Image/YYAnimatedImageView.m; sourceTree = "<group>"; }; |
| 807 | 775 | BB6D4086660DB0E2BA9271C5D4780106 /* YBIBToastView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBToastView.h; sourceTree = "<group>"; }; |
| 776 | + BBC835DD376D230B30079993F2F5CDAA /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = "<group>"; }; | |
| 808 | 777 | BC5FD9E63BBBE388DFDB5D32A946420D /* NSParagraphStyle+YYText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSParagraphStyle+YYText.h"; path = "YYKit/Text/String/NSParagraphStyle+YYText.h"; sourceTree = "<group>"; }; |
| 809 | 778 | BCBF70C32E733B22D48AF84D60FF7B02 /* YYWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYWebImageOperation.h; path = YYKit/Image/YYWebImageOperation.h; sourceTree = "<group>"; }; |
| 810 | - BE3ECDB29BE68019FD7DE942E2F58BD0 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = "<group>"; }; | |
| 811 | 779 | BE4A801C5A9481E70AE53035D5B98760 /* NSKeyedUnarchiver+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSKeyedUnarchiver+YYAdd.h"; path = "YYKit/Base/Foundation/NSKeyedUnarchiver+YYAdd.h"; sourceTree = "<group>"; }; |
| 780 | + BF2240205CFBA63D171F27ED059DA17F /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = "<group>"; }; | |
| 781 | + C090D5ECCFD39D2D4DF00BFB1D9DAB81 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = "<group>"; }; | |
| 782 | + C0F853EDBA5EE0AFD5FF80DF4E069774 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = "<group>"; }; | |
| 812 | 783 | C183149AE26EC946A2F3DEA358713217 /* YYLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYLabel.h; path = YYKit/Text/YYLabel.h; sourceTree = "<group>"; }; |
| 813 | - C1B3FCC15992E25641767F7CD50BAA99 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = "<group>"; }; | |
| 814 | - C263B2AFBE7F6297AC0A2DD306AE5B6A /* SDImageHEICCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoderInternal.h; path = SDWebImage/Private/SDImageHEICCoderInternal.h; sourceTree = "<group>"; }; | |
| 815 | 784 | C2C48205DC5A7E61206B83FBA6C16A03 /* YYKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = YYKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 785 | + C2DE3B8DDA43BF244A83FA3A8E49B9C4 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = "<group>"; }; | |
| 816 | 786 | C33607D6BC000651FEC30D2EED376D88 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 817 | - C36986E68072E6D37FC44159464E6E63 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = "<group>"; }; | |
| 787 | + C343BEA71DA4406F27A27215550DB0CA /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = "<group>"; }; | |
| 818 | 788 | C38664F785477D7E2523617102E1EDC4 /* YBImageBrowser_DSCnliveShop.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YBImageBrowser_DSCnliveShop.modulemap; sourceTree = "<group>"; }; |
| 819 | - C43DE0B9900A2DBDABA15312032D955B /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = "<group>"; }; | |
| 820 | 789 | C44903C29949935DD57FD35B5C9BF35F /* YYKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYKit.release.xcconfig; sourceTree = "<group>"; }; |
| 821 | 790 | C468387A3C29B551DAA6C6AF5145ACB1 /* Pods-YBImageBrowser_DSCnliveShop_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-YBImageBrowser_DSCnliveShop_Tests.debug.xcconfig"; sourceTree = "<group>"; }; |
| 822 | 791 | C53CAE703785CC63612BF51D647BF00A /* Pods_YBImageBrowser_DSCnliveShop_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_YBImageBrowser_DSCnliveShop_Example.framework; path = "Pods-YBImageBrowser_DSCnliveShop_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 823 | - C54648ED166C9850805DF18B9BF1A305 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = "<group>"; }; | |
| 824 | - C550536A6B0FFCC49930C911A1A845CA /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = "<group>"; }; | |
| 792 | + C54E545CC107D12C2F5AA2887BAF107E /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = "<group>"; }; | |
| 825 | 793 | C5ECB9A46117BBECE7ED798130B798AA /* UIPasteboard+YYText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPasteboard+YYText.m"; path = "YYKit/Text/String/UIPasteboard+YYText.m"; sourceTree = "<group>"; }; |
| 826 | - C6064257443573B6B4428384FE55B429 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; }; | |
| 827 | 794 | C67FA1CF5455B750586F3E50B4AEE6B5 /* YYCGUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYCGUtilities.m; path = YYKit/Base/Quartz/YYCGUtilities.m; sourceTree = "<group>"; }; |
| 828 | 795 | C687ECF69184AC5484EFA0598E66B804 /* Pods-YBImageBrowser_DSCnliveShop_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-YBImageBrowser_DSCnliveShop_Tests-frameworks.sh"; sourceTree = "<group>"; }; |
| 829 | 796 | C6E9A2826ED6D4338904F22C672B4751 /* Pods-YBImageBrowser_DSCnliveShop_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-YBImageBrowser_DSCnliveShop_Tests.release.xcconfig"; sourceTree = "<group>"; }; |
| 830 | 797 | C705108BAA5E0F79A36A255F671FD73C /* YBImageBrowser_DSCnliveShop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YBImageBrowser_DSCnliveShop-dummy.m"; sourceTree = "<group>"; }; |
| 831 | - C758F6AA3BEFD52D81A2E68FD89C92BC /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = "<group>"; }; | |
| 832 | 798 | C78F1C99D55F3A5B2B595CEAAF59A086 /* Pods-YBImageBrowser_DSCnliveShop_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-YBImageBrowser_DSCnliveShop_Tests-Info.plist"; sourceTree = "<group>"; }; |
| 833 | 799 | C805133F6D3AF69C8994E6375F7B7155 /* YYImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImageCoder.h; path = YYKit/Image/YYImageCoder.h; sourceTree = "<group>"; }; |
| 834 | - C8D85332D2674E584830AC6CFE3141FE /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = "<group>"; }; | |
| 800 | + C8CF816C63E5B6559556C778BE819AF4 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = "<group>"; }; | |
| 835 | 801 | C8FC24C723EADE5F3C5975BE2907EB1E /* YYTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTransaction.m; path = YYKit/Utility/YYTransaction.m; sourceTree = "<group>"; }; |
| 836 | 802 | C95F8792B9A29FF9F37927E606871D5B /* YYThreadSafeArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYThreadSafeArray.h; path = YYKit/Utility/YYThreadSafeArray.h; sourceTree = "<group>"; }; |
| 837 | - C9B03AE8F74ED6BF9967696B1F29AC24 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = "<group>"; }; | |
| 838 | 803 | C9B5994C44BF5B2184C156762E7CE811 /* UIView+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+YYAdd.m"; path = "YYKit/Base/UIKit/UIView+YYAdd.m"; sourceTree = "<group>"; }; |
| 804 | + CA2F973E303B162092C59FA182AC2842 /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = "<group>"; }; | |
| 839 | 805 | CA7D546D1F3F75461DF8423D2BF90D68 /* YBIBImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBImageCache.h; sourceTree = "<group>"; }; |
| 840 | 806 | CAF78B066BA4AA1500A5DFC15357B69A /* YYTextLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextLine.m; path = YYKit/Text/Component/YYTextLine.m; sourceTree = "<group>"; }; |
| 841 | - CB6206FBA44F9BD5BB69EB2338D24399 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = "<group>"; }; | |
| 807 | + CB003CB825038F390A91BFD066D5DC11 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = "<group>"; }; | |
| 808 | + CB33D1B5F3A87441C78240849B1BD409 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = "<group>"; }; | |
| 842 | 809 | CC069742328B0F99B589CD1E88042C72 /* YBIBImageData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBImageData.h; sourceTree = "<group>"; }; |
| 843 | - CD970A6F82F507060C225F86F7A3F410 /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = "<group>"; }; | |
| 844 | - CDA24BB0F92E4A49AC0BE6BF22D67546 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = "<group>"; }; | |
| 845 | - CE599BD66BC1D5DBF2513D84C9CF10D2 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = "<group>"; }; | |
| 846 | - CEA5120287BD232F4C4CECF7D74E0104 /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = "<group>"; }; | |
| 847 | - CF05C25EE17396B80BB50C70733D2421 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = "<group>"; }; | |
| 848 | - CF9EB80B340726BF23F53617B34B3575 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = "<group>"; }; | |
| 849 | - D0DD7284FE8B0C78E070E9DA2D0C46E2 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = "<group>"; }; | |
| 810 | + CCFF6195D3943C3B2EE93D641F705287 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = "<group>"; }; | |
| 811 | + CF824EAADAAA9D61882AC1E95A4FAAC5 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = "<group>"; }; | |
| 812 | + D0BFF09BFCD201810684D60E49FC29B3 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = "<group>"; }; | |
| 850 | 813 | D12BADAA1C1EED1E8EFC4C3B586A68EF /* YYTextEffectWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextEffectWindow.m; path = YYKit/Text/Component/YYTextEffectWindow.m; sourceTree = "<group>"; }; |
| 851 | - D137AC86EF60C0DD4725A67DBED5F6EC /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = "<group>"; }; | |
| 852 | 814 | D1A59D21F9903431B185E3E4DF0AFFEF /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; |
| 853 | - D1A63106E180D500BA4681CBFF159C50 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = "<group>"; }; | |
| 854 | 815 | D233F6DF8E8D5110BD7F6E76747F33D8 /* YYReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYReachability.m; path = YYKit/Utility/YYReachability.m; sourceTree = "<group>"; }; |
| 816 | + D25E5ABBC1DC5FB5597B7FD6AF7395A6 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = "<group>"; }; | |
| 855 | 817 | D27CB4C11DD858E2346FCDB108967EE5 /* YYTextParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextParser.m; path = YYKit/Text/String/YYTextParser.m; sourceTree = "<group>"; }; |
| 856 | 818 | D2A8889944F3D4BE1188A99F60D3CA7A /* YYKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYKit.debug.xcconfig; sourceTree = "<group>"; }; |
| 857 | - D2BF5A3EEE1A287B05D28198D9F16C76 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = "<group>"; }; | |
| 819 | + D3B294F209BE90C307D3B79D646A580E /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = "<group>"; }; | |
| 858 | 820 | D4E670F4B8312D4F2B06ADC2B636AFE4 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; }; |
| 859 | - D60E08CE2DF723239081CE2F04FA6324 /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = "<group>"; }; | |
| 821 | + D5EFE1BA58FE69FA738DCB9784D3B2E0 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = "<group>"; }; | |
| 860 | 822 | D696C9B3DB7929040B3B11E0888CE4D6 /* UIButton+YYWebImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+YYWebImage.m"; path = "YYKit/Image/Categories/UIButton+YYWebImage.m"; sourceTree = "<group>"; }; |
| 861 | 823 | D7D005AD047909BDCC633A8A2F44C3E0 /* UIFont+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+YYAdd.m"; path = "YYKit/Base/UIKit/UIFont+YYAdd.m"; sourceTree = "<group>"; }; |
| 862 | 824 | D90E67DC9CA5A5BBD19018BD64C3ED87 /* YBIBCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBCollectionView.h; sourceTree = "<group>"; }; |
| 863 | - D99CAD8BB03A1ED3ACC306DE0083743C /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; }; | |
| 864 | - DA18D81BDAB5332971532C646A936989 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = "<group>"; }; | |
| 865 | 825 | DA809AC31169252E62703BD0FBD06EE5 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; |
| 866 | - DB7A93383CAC54408CD5E5B395011B2E /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = "<group>"; }; | |
| 867 | - DC9B7833ED252B3A3CDA8CD870E5136B /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = "<group>"; }; | |
| 826 | + DCA9751DEFA2CAEA416E397CD0197E4C /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = "<group>"; }; | |
| 868 | 827 | DD5396322ED69A5415D1CCD0B6393CA3 /* UITableView+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+YYAdd.m"; path = "YYKit/Base/UIKit/UITableView+YYAdd.m"; sourceTree = "<group>"; }; |
| 828 | + DD7EB188DA7D4BC587FE249FF628B51C /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = "<group>"; }; | |
| 829 | + DDF0A0D18F37DBE6D852FCEA2251F1C1 /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = "<group>"; }; | |
| 869 | 830 | DE1BA937D17936A4E8CC48CCF258E498 /* YBImageBrowserDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBImageBrowserDataSource.h; sourceTree = "<group>"; }; |
| 870 | 831 | DEAEE433C1A4AC2340AD30180CD833DE /* YYAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYAnimatedImageView.h; path = YYKit/Image/YYAnimatedImageView.h; sourceTree = "<group>"; }; |
| 871 | - DF00E591E4B26D6D1D35456AAE90B1C1 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = "<group>"; }; | |
| 872 | 832 | DF010552264134747196B93F7030F079 /* YBIBToolViewHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBIBToolViewHandler.m; sourceTree = "<group>"; }; |
| 873 | - DF0BE15112187DE13F59F20FD37196BF /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = "<group>"; }; | |
| 833 | + DF6A0A2DCDCF701127D57F57D20CEE46 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = "<group>"; }; | |
| 874 | 834 | DFF08367FC3C8240577C21AB0C7C45C0 /* Pods-YBImageBrowser_DSCnliveShop_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-YBImageBrowser_DSCnliveShop_Example-acknowledgements.plist"; sourceTree = "<group>"; }; |
| 835 | + DFFBF564BC41F65FF3EF9F404A3FF8A5 /* NSBezierPath+RoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+RoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+RoundedCorners.m"; sourceTree = "<group>"; }; | |
| 836 | + E028311EA2C17015A8136F9F9A3DEEEC /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = "<group>"; }; | |
| 875 | 837 | E06030C0DF9E059A44DC7D324FA93760 /* NSObject+YYModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YYModel.m"; path = "YYKit/Model/NSObject+YYModel.m"; sourceTree = "<group>"; }; |
| 876 | 838 | E0EC1E067A40BD358E24914526274E18 /* UITableView+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+YYAdd.h"; path = "YYKit/Base/UIKit/UITableView+YYAdd.h"; sourceTree = "<group>"; }; |
| 877 | 839 | E11C276295B8B9FBB66B8CFCEDD10534 /* YBIBWebImageMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBWebImageMediator.h; sourceTree = "<group>"; }; |
| 878 | 840 | E1789ACB2E0A630C9C7419690313D4BD /* YYKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYKeychain.h; path = YYKit/Utility/YYKeychain.h; sourceTree = "<group>"; }; |
| 841 | + E1824D23FFCDBDE557E8BCF4A5D1EB64 /* SDImageHEICCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoderInternal.h; path = SDWebImage/Private/SDImageHEICCoderInternal.h; sourceTree = "<group>"; }; | |
| 879 | 842 | E1BB297824FFFF51C70FA022B56A9D4F /* YBImageBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = YBImageBrowser.m; sourceTree = "<group>"; }; |
| 880 | 843 | E1EF95E26F5A8BC0AD3CEC7DE8D50611 /* NSObject+YYAddForKVO.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YYAddForKVO.m"; path = "YYKit/Base/Foundation/NSObject+YYAddForKVO.m"; sourceTree = "<group>"; }; |
| 881 | - E1FACAD68445DC5C8232A29CDDE00106 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = "<group>"; }; | |
| 882 | 844 | E20C5E35E7CBCF4496931DDD69C93799 /* UIControl+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIControl+YYAdd.m"; path = "YYKit/Base/UIKit/UIControl+YYAdd.m"; sourceTree = "<group>"; }; |
| 845 | + E2F6363B89177C5ED56B90058D1B1B9A /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = "<group>"; }; | |
| 883 | 846 | E30659E8DA748D0CF9EA5E88C15DA2DA /* YYTextInput.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextInput.m; path = YYKit/Text/Component/YYTextInput.m; sourceTree = "<group>"; }; |
| 884 | 847 | E325DCCD357AF9DF2F7C506424659D7E /* YYKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YYKit.framework; path = YYKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
| 885 | 848 | E326D6F0395EE4BAE670CD855A8D0176 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; |
| 886 | 849 | E467579343CF6E084F5AF44750D3B054 /* YYDispatchQueuePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYDispatchQueuePool.h; path = YYKit/Utility/YYDispatchQueuePool.h; sourceTree = "<group>"; }; |
| 887 | 850 | E515123172BB360DF3179CFE108F842C /* UIImage+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+YYAdd.h"; path = "YYKit/Base/UIKit/UIImage+YYAdd.h"; sourceTree = "<group>"; }; |
| 888 | - E5A710E84F3BA6FCB0CFF41E78AD5CBD /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = "<group>"; }; | |
| 889 | 851 | E6549BAAE978C54E9943845A282B7887 /* NSObject+YYAddForARC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YYAddForARC.h"; path = "YYKit/Base/Foundation/NSObject+YYAddForARC.h"; sourceTree = "<group>"; }; |
| 890 | - E6B26DB6EEA41E128F36B8CCD8BA6C90 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = "<group>"; }; | |
| 852 | + E6AC77D76359DA3AB60BBECA32896CFA /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = "<group>"; }; | |
| 891 | 853 | E7A8CFE58CA45BE0CF414ED53D7E9831 /* YYTextInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextInput.h; path = YYKit/Text/Component/YYTextInput.h; sourceTree = "<group>"; }; |
| 854 | + E8864E2BCB6F0A60BF7660FD5CA61884 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = "<group>"; }; | |
| 892 | 855 | E8D8F6D1F22DBBBCE9CEB97BF76ED5F6 /* YYMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYMemoryCache.m; path = YYKit/Cache/YYMemoryCache.m; sourceTree = "<group>"; }; |
| 893 | 856 | E904FC5D8903C2F05EA80AE4EB158849 /* YYTextDebugOption.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextDebugOption.m; path = YYKit/Text/Component/YYTextDebugOption.m; sourceTree = "<group>"; }; |
| 894 | - E94B7142D84F4E7AD5A126B60C5056AA /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = "<group>"; }; | |
| 895 | 857 | E97D1AED9A06E626CDC89DE4248FA2DF /* UIButton+YYWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+YYWebImage.h"; path = "YYKit/Image/Categories/UIButton+YYWebImage.h"; sourceTree = "<group>"; }; |
| 896 | 858 | EA76762360977A0F9DF281854B915408 /* WebP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebP.framework; path = Vendor/WebP.framework; sourceTree = "<group>"; }; |
| 859 | + EB79E7A300B9098CE8EED7EB98A1E5AA /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = "<group>"; }; | |
| 860 | + EBAB61DD2D434A28A27FC5DFC9B7D499 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = "<group>"; }; | |
| 861 | + EBC3A38B3CF4356703DC4ABF85E1FB8C /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = "<group>"; }; | |
| 897 | 862 | EC297FCDA53117783E423EFCF34C4C6C /* YBIBInteractionProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBInteractionProfile.h; sourceTree = "<group>"; }; |
| 898 | - ECCFB33F5B2FAFCB9059F1EA4872AD5E /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = "<group>"; }; | |
| 899 | 863 | ECF2A1D940AD2ABA3D907CE415109326 /* NSNotificationCenter+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNotificationCenter+YYAdd.h"; path = "YYKit/Base/Foundation/NSNotificationCenter+YYAdd.h"; sourceTree = "<group>"; }; |
| 900 | 864 | ED78F9035D62E00668B4A848571B55C4 /* YBIBVideoView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBVideoView.h; sourceTree = "<group>"; }; |
| 901 | - EF282CB27CB176AE4D81EB193162E61C /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = "<group>"; }; | |
| 865 | + EDCF5C73C34D7FE7CBD5AEC45E26DD16 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = "<group>"; }; | |
| 866 | + EF4C3869889BF6E0FB48DB6D3E50C42B /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = "<group>"; }; | |
| 902 | 867 | EF5D08601B4B637FF284E68A8EEC858C /* NSArray+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+YYAdd.h"; path = "YYKit/Base/Foundation/NSArray+YYAdd.h"; sourceTree = "<group>"; }; |
| 903 | - EFBE035B06C6B5FC5316B23AA385AEB7 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = "<group>"; }; | |
| 904 | - EFFC73CFCA9A8BA73DF3B34FE5E9C8B0 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = "<group>"; }; | |
| 905 | 868 | F0C1D31C0ED9EAF5880440E2214DFB67 /* YBIBLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBLoadingView.h; sourceTree = "<group>"; }; |
| 906 | 869 | F170A24D4E53C3C47A8CE99795457D6A /* Pods-YBImageBrowser_DSCnliveShop_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-YBImageBrowser_DSCnliveShop_Example-umbrella.h"; sourceTree = "<group>"; }; |
| 907 | 870 | F223C16A87C557408148C7C83CCB705A /* YYImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImage.m; path = YYKit/Image/YYImage.m; sourceTree = "<group>"; }; |
| 908 | 871 | F23B513D9D8F0D3A6E0802706EAAE0A0 /* YYClassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYClassInfo.m; path = YYKit/Model/YYClassInfo.m; sourceTree = "<group>"; }; |
| 909 | 872 | F34CC7CBACC2F933C4B4839C7EC1F010 /* YYKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYKit.h; path = YYKit/YYKit.h; sourceTree = "<group>"; }; |
| 910 | - F37753D5DA03467158CF8F3BFA52E460 /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = "<group>"; }; | |
| 911 | 873 | F3DE1A955E99033B5412502804883E07 /* YYDispatchQueuePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYDispatchQueuePool.m; path = YYKit/Utility/YYDispatchQueuePool.m; sourceTree = "<group>"; }; |
| 912 | - F3FA042CB9FEAE916F9354DD0FFDC410 /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = "<group>"; }; | |
| 913 | 874 | F48485AE0CAFC4B57A15BC09F76DF01F /* YBIBVideoCell+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBIBVideoCell+Internal.h"; sourceTree = "<group>"; }; |
| 914 | - F4C26425407B34D7EF26491A3F6C3412 /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = "<group>"; }; | |
| 875 | + F4BDDDF94411952465D7BEFFCA8B5C29 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = "<group>"; }; | |
| 915 | 876 | F5253D89927E6E90C258D665347D1F07 /* UIScreen+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+YYAdd.h"; path = "YYKit/Base/UIKit/UIScreen+YYAdd.h"; sourceTree = "<group>"; }; |
| 916 | 877 | F5670120F17DFEC029094ABAC2358C59 /* YBIBVideoData+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBIBVideoData+Internal.h"; sourceTree = "<group>"; }; |
| 917 | - F71C63A56CAAF9072729B55B779D9414 /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = "<group>"; }; | |
| 878 | + F59687F8773BB30C3383C0C4473BA5A9 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = "<group>"; }; | |
| 918 | 879 | F72C19B1352F5752908C2B4982AD0FE4 /* UITextField+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+YYAdd.h"; path = "YYKit/Base/UIKit/UITextField+YYAdd.h"; sourceTree = "<group>"; }; |
| 919 | 880 | F73A399C03844F00743876DD304D6F5F /* YBIBContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBContainerView.h; sourceTree = "<group>"; }; |
| 920 | - F73E603FC59F5282264218DA84C3E5B7 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = "<group>"; }; | |
| 921 | 881 | F871C4EC920DBA02D64392716E35FB37 /* YBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBImageBrowser.h; sourceTree = "<group>"; }; |
| 922 | 882 | F891D9C6F80528B90027D56EA36CD7DA /* UIScrollView+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+YYAdd.h"; path = "YYKit/Base/UIKit/UIScrollView+YYAdd.h"; sourceTree = "<group>"; }; |
| 923 | 883 | F8D3E6C92E8F4DF67950E0380B5C4AD1 /* YYKVStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYKVStorage.h; path = YYKit/Cache/YYKVStorage.h; sourceTree = "<group>"; }; |
| 924 | 884 | F95AF0A9B4FD11599AC907D5ED78047F /* YBIBImageCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YBIBImageCell.h; sourceTree = "<group>"; }; |
| 925 | 885 | FA31B22A4EC7CB38F40BE6C28871B56C /* NSThread+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSThread+YYAdd.m"; path = "YYKit/Base/Foundation/NSThread+YYAdd.m"; sourceTree = "<group>"; }; |
| 926 | 886 | FAAA1659DC5FA259CDDED68F436C2BF1 /* CALayer+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+YYAdd.m"; path = "YYKit/Base/Quartz/CALayer+YYAdd.m"; sourceTree = "<group>"; }; |
| 887 | + FB9F487DEA2EE1223E588AF5B7968BBC /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = "<group>"; }; | |
| 888 | + FBAFB1147F9F60F82F67F2F93767AEA8 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = "<group>"; }; | |
| 927 | 889 | FC399F5E175605828984C7E67A02DD73 /* NSObject+YYModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YYModel.h"; path = "YYKit/Model/NSObject+YYModel.h"; sourceTree = "<group>"; }; |
| 928 | 890 | FC526297A9617C4BE9A6F090BD02A7EC /* YYWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYWebImageManager.m; path = YYKit/Image/YYWebImageManager.m; sourceTree = "<group>"; }; |
| 929 | - FCDCB1EFEE1048CBC6179F66B7E7E6E9 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = "<group>"; }; | |
| 930 | 891 | FD46990B6EBC034765E7F896D7692AF0 /* NSString+YYAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+YYAdd.h"; path = "YYKit/Base/Foundation/NSString+YYAdd.h"; sourceTree = "<group>"; }; |
| 892 | + FD9DAE7E5EAD3CA463241E107ADB319B /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = "<group>"; }; | |
| 931 | 893 | FDAB2149ED799695566D25A14612AFD4 /* YYWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYWeakProxy.h; path = YYKit/Utility/YYWeakProxy.h; sourceTree = "<group>"; }; |
| 932 | - FDF39D0D9A539DD852E83070D546838D /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = "<group>"; }; | |
| 933 | - FE71B363E5C4B1A08ED28F0F030C3610 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = "<group>"; }; | |
| 934 | 894 | FF1FC22A806424A9D295AA3C1785B496 /* NSObject+YYAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YYAdd.m"; path = "YYKit/Base/Foundation/NSObject+YYAdd.m"; sourceTree = "<group>"; }; |
| 935 | - FFC1A8B570BBF9B90CBC65027B601DEE /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = "<group>"; }; | |
| 895 | + FF96D9B286912D2041A6038E44BF9D78 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = "<group>"; }; | |
| 936 | 896 | /* End PBXFileReference section */ |
| 937 | 897 | |
| 938 | 898 | /* Begin PBXFrameworksBuildPhase section */ |
| ... | ... | @@ -971,22 +931,22 @@ |
| 971 | 931 | ); |
| 972 | 932 | runOnlyForDeploymentPostprocessing = 0; |
| 973 | 933 | }; |
| 974 | - 93E1803EFFB49B8B5D9BE9C3FF15E708 /* Frameworks */ = { | |
| 934 | + D63F6433B5D27689683CDCF24F678FE6 /* Frameworks */ = { | |
| 975 | 935 | isa = PBXFrameworksBuildPhase; |
| 976 | 936 | buildActionMask = 2147483647; |
| 977 | 937 | files = ( |
| 978 | - 8F0623242A13E39BB0068F748D5A7819 /* Foundation.framework in Frameworks */, | |
| 979 | - 7F47C6E48CDC5A9B788F8EB05D826BE6 /* ImageIO.framework in Frameworks */, | |
| 938 | + CD7563B5139A26E5B8B2587E0D658705 /* Foundation.framework in Frameworks */, | |
| 939 | + D92524C9E26C07719E07A9786B6B7892 /* SDWebImage.framework in Frameworks */, | |
| 940 | + 60B44F3A94381A9FC25BD53BCDBA7062 /* YYKit.framework in Frameworks */, | |
| 980 | 941 | ); |
| 981 | 942 | runOnlyForDeploymentPostprocessing = 0; |
| 982 | 943 | }; |
| 983 | - D63F6433B5D27689683CDCF24F678FE6 /* Frameworks */ = { | |
| 944 | + ECEA1B04AA580BD337B52CB84D1C00A8 /* Frameworks */ = { | |
| 984 | 945 | isa = PBXFrameworksBuildPhase; |
| 985 | 946 | buildActionMask = 2147483647; |
| 986 | 947 | files = ( |
| 987 | - CD7563B5139A26E5B8B2587E0D658705 /* Foundation.framework in Frameworks */, | |
| 988 | - D92524C9E26C07719E07A9786B6B7892 /* SDWebImage.framework in Frameworks */, | |
| 989 | - 60B44F3A94381A9FC25BD53BCDBA7062 /* YYKit.framework in Frameworks */, | |
| 948 | + 3B9737EB4BDEA61D7A6D7C2F83ADE16B /* Foundation.framework in Frameworks */, | |
| 949 | + 95AC0F0E049EC392931B147F1BA4C11E /* ImageIO.framework in Frameworks */, | |
| 990 | 950 | ); |
| 991 | 951 | runOnlyForDeploymentPostprocessing = 0; |
| 992 | 952 | }; |
| ... | ... | @@ -1055,154 +1015,6 @@ |
| 1055 | 1015 | name = Pod; |
| 1056 | 1016 | sourceTree = "<group>"; |
| 1057 | 1017 | }; |
| 1058 | - 1A858AEA06D9DB5413EC15E1834061B8 /* Core */ = { | |
| 1059 | - isa = PBXGroup; | |
| 1060 | - children = ( | |
| 1061 | - 8811346772E1C5599090A46F4A2D8681 /* NSBezierPath+SDRoundedCorners.h */, | |
| 1062 | - 608E04456BC00743986E00E4A8181EA3 /* NSBezierPath+SDRoundedCorners.m */, | |
| 1063 | - C1B3FCC15992E25641767F7CD50BAA99 /* NSButton+WebCache.h */, | |
| 1064 | - 4C8603634C14CA0EB02BA831268B0C10 /* NSButton+WebCache.m */, | |
| 1065 | - DB7A93383CAC54408CD5E5B395011B2E /* NSData+ImageContentType.h */, | |
| 1066 | - EFBE035B06C6B5FC5316B23AA385AEB7 /* NSData+ImageContentType.m */, | |
| 1067 | - A7D134637245A1D1291AEBC7FA27654E /* NSImage+Compatibility.h */, | |
| 1068 | - 4D6746DFA44B1641AE23A50377370530 /* NSImage+Compatibility.m */, | |
| 1069 | - 17C2170C0DA7F6751732A3F6F2D3304C /* SDAnimatedImage.h */, | |
| 1070 | - D137AC86EF60C0DD4725A67DBED5F6EC /* SDAnimatedImage.m */, | |
| 1071 | - DC9B7833ED252B3A3CDA8CD870E5136B /* SDAnimatedImagePlayer.h */, | |
| 1072 | - E6B26DB6EEA41E128F36B8CCD8BA6C90 /* SDAnimatedImagePlayer.m */, | |
| 1073 | - 71AEC717DE657C306DC4220359875899 /* SDAnimatedImageRep.h */, | |
| 1074 | - FE71B363E5C4B1A08ED28F0F030C3610 /* SDAnimatedImageRep.m */, | |
| 1075 | - AF3424AF58293B7AECCBA5ADAE1E90EB /* SDAnimatedImageView.h */, | |
| 1076 | - 8EADB1874F009D5810228B521E808F8C /* SDAnimatedImageView.m */, | |
| 1077 | - 9B374325A4827DE6AA8D86E8A4CA0C0E /* SDAnimatedImageView+WebCache.h */, | |
| 1078 | - CB6206FBA44F9BD5BB69EB2338D24399 /* SDAnimatedImageView+WebCache.m */, | |
| 1079 | - 12B66AB16766AB4060516E7814443E08 /* SDAssociatedObject.h */, | |
| 1080 | - 507EA85A920020FD53FDF4A254A318F9 /* SDAssociatedObject.m */, | |
| 1081 | - 14EF33DBBD181973544221E30D2DC4B9 /* SDAsyncBlockOperation.h */, | |
| 1082 | - A7D32E803217C60CD15496E8FBD13FDF /* SDAsyncBlockOperation.m */, | |
| 1083 | - CD970A6F82F507060C225F86F7A3F410 /* SDDeviceHelper.h */, | |
| 1084 | - 54932F1D65D4CE3969AD7014585252E6 /* SDDeviceHelper.m */, | |
| 1085 | - 8D17D294A9F7DCF9895D5A3337D8B886 /* SDDiskCache.h */, | |
| 1086 | - C36986E68072E6D37FC44159464E6E63 /* SDDiskCache.m */, | |
| 1087 | - 4EB5FC7AFB1E5240D21A6FE7DF89E87C /* SDDisplayLink.h */, | |
| 1088 | - 57001503938AEFE09B39A90CD56CF65A /* SDDisplayLink.m */, | |
| 1089 | - 8F25D99C7ED5F7ECE058950E756B815B /* SDFileAttributeHelper.h */, | |
| 1090 | - 615E844CC98D96DCD6F0EFE36CFF13BF /* SDFileAttributeHelper.m */, | |
| 1091 | - 6016CD6764077B1F107BD22483AA7D14 /* SDGraphicsImageRenderer.h */, | |
| 1092 | - 6DB88B001512FB115B60C0A194FAB687 /* SDGraphicsImageRenderer.m */, | |
| 1093 | - E1FACAD68445DC5C8232A29CDDE00106 /* SDImageAPNGCoder.h */, | |
| 1094 | - 1072A8A4B2B89ECA95DD401CFB50F108 /* SDImageAPNGCoder.m */, | |
| 1095 | - 657DCFEE5B399779371CC2AC2AAAA206 /* SDImageAssetManager.h */, | |
| 1096 | - 1C715A63047EF7CF84A44FC37DB4E919 /* SDImageAssetManager.m */, | |
| 1097 | - 14FC848A818168BBB863CFE049B98704 /* SDImageCache.h */, | |
| 1098 | - 232C7410166470C58B9D7DD4BEE465D6 /* SDImageCache.m */, | |
| 1099 | - DF00E591E4B26D6D1D35456AAE90B1C1 /* SDImageCacheConfig.h */, | |
| 1100 | - A788FE41CE72DC285C7E12274B2EEA45 /* SDImageCacheConfig.m */, | |
| 1101 | - A1CF482AD1045FF137E38C654A5C5F0A /* SDImageCacheDefine.h */, | |
| 1102 | - 1249E97F29FD39E6B5CA9DD3D122921C /* SDImageCacheDefine.m */, | |
| 1103 | - 5E05A254217112511844A5ABAEA26D88 /* SDImageCachesManager.h */, | |
| 1104 | - 3F7D6860C305EDC74687492EDEFC2325 /* SDImageCachesManager.m */, | |
| 1105 | - F3FA042CB9FEAE916F9354DD0FFDC410 /* SDImageCachesManagerOperation.h */, | |
| 1106 | - CEA5120287BD232F4C4CECF7D74E0104 /* SDImageCachesManagerOperation.m */, | |
| 1107 | - F4C26425407B34D7EF26491A3F6C3412 /* SDImageCoder.h */, | |
| 1108 | - 36C8C2D7C7ACA9C26136F7A7D1154082 /* SDImageCoder.m */, | |
| 1109 | - CF05C25EE17396B80BB50C70733D2421 /* SDImageCoderHelper.h */, | |
| 1110 | - E94B7142D84F4E7AD5A126B60C5056AA /* SDImageCoderHelper.m */, | |
| 1111 | - D0DD7284FE8B0C78E070E9DA2D0C46E2 /* SDImageCodersManager.h */, | |
| 1112 | - 7E26822C5FA7DDEE80076B4E7C2728A9 /* SDImageCodersManager.m */, | |
| 1113 | - C43DE0B9900A2DBDABA15312032D955B /* SDImageFrame.h */, | |
| 1114 | - D2BF5A3EEE1A287B05D28198D9F16C76 /* SDImageFrame.m */, | |
| 1115 | - EF282CB27CB176AE4D81EB193162E61C /* SDImageGIFCoder.h */, | |
| 1116 | - C758F6AA3BEFD52D81A2E68FD89C92BC /* SDImageGIFCoder.m */, | |
| 1117 | - A86C89F5D3FD68F631C6AAB3E9FFDB67 /* SDImageGraphics.h */, | |
| 1118 | - 13211B603D4A4D4D2724F2C5BB4407D3 /* SDImageGraphics.m */, | |
| 1119 | - 2E02A020962AA8A983BE9DEF489D5CC5 /* SDImageHEICCoder.h */, | |
| 1120 | - F73E603FC59F5282264218DA84C3E5B7 /* SDImageHEICCoder.m */, | |
| 1121 | - C263B2AFBE7F6297AC0A2DD306AE5B6A /* SDImageHEICCoderInternal.h */, | |
| 1122 | - 7CA02462DD9F35B55FD8C20DC0A0CDBC /* SDImageIOAnimatedCoder.h */, | |
| 1123 | - FFC1A8B570BBF9B90CBC65027B601DEE /* SDImageIOAnimatedCoder.m */, | |
| 1124 | - 8582059F08F05B024B1E63DB97E6FC3D /* SDImageIOAnimatedCoderInternal.h */, | |
| 1125 | - 2DC1F761B34C39B4907D5DB70157ABFC /* SDImageIOCoder.h */, | |
| 1126 | - 102A8609FE38B44A4F04554766133491 /* SDImageIOCoder.m */, | |
| 1127 | - 91C17D860CA95052284F7C9198001DC9 /* SDImageLoader.h */, | |
| 1128 | - C9B03AE8F74ED6BF9967696B1F29AC24 /* SDImageLoader.m */, | |
| 1129 | - CE599BD66BC1D5DBF2513D84C9CF10D2 /* SDImageLoadersManager.h */, | |
| 1130 | - 5D239E8639A886939B6B5EB58FC27342 /* SDImageLoadersManager.m */, | |
| 1131 | - 5DD0F8422DC31BC404DEB779AA5DB139 /* SDImageTransformer.h */, | |
| 1132 | - 115DF10AB89F4BD3959B0760E6FF7F5A /* SDImageTransformer.m */, | |
| 1133 | - 1ECDD31DCADBB91FE191C953267FFF2D /* SDInternalMacros.h */, | |
| 1134 | - C8D85332D2674E584830AC6CFE3141FE /* SDInternalMacros.m */, | |
| 1135 | - CDA24BB0F92E4A49AC0BE6BF22D67546 /* SDMemoryCache.h */, | |
| 1136 | - CF9EB80B340726BF23F53617B34B3575 /* SDMemoryCache.m */, | |
| 1137 | - F37753D5DA03467158CF8F3BFA52E460 /* SDmetamacros.h */, | |
| 1138 | - 9915D39521761F821273ED4AD94F462B /* SDWeakProxy.h */, | |
| 1139 | - 0786ADD48518359C5D9C950902C74B70 /* SDWeakProxy.m */, | |
| 1140 | - 467332BA4DF047A604E2AD170D2A9A6C /* SDWebImage.h */, | |
| 1141 | - 3C016044B645AE229C947C4E2E37F78B /* SDWebImageCacheKeyFilter.h */, | |
| 1142 | - 92D743407EFB5C298F8E9856F618DE87 /* SDWebImageCacheKeyFilter.m */, | |
| 1143 | - 3CA0E2F59E86C22963A7F42A601D4D9D /* SDWebImageCacheSerializer.h */, | |
| 1144 | - 7EA2BCD717BF8B6108E49F1344996DCF /* SDWebImageCacheSerializer.m */, | |
| 1145 | - 618EA55D0CE2B6CFE74715E49A256295 /* SDWebImageCompat.h */, | |
| 1146 | - FCDCB1EFEE1048CBC6179F66B7E7E6E9 /* SDWebImageCompat.m */, | |
| 1147 | - 3103E35D6924D70FC117A1BFA21077C8 /* SDWebImageDefine.h */, | |
| 1148 | - 7025B67B4A01BBCCCFB1958DC25846D2 /* SDWebImageDefine.m */, | |
| 1149 | - 165A9BD2C6ABE7C53969D2E146053DCC /* SDWebImageDownloader.h */, | |
| 1150 | - 4B31C91F7BAC29DAB475F9F033793951 /* SDWebImageDownloader.m */, | |
| 1151 | - BE3ECDB29BE68019FD7DE942E2F58BD0 /* SDWebImageDownloaderConfig.h */, | |
| 1152 | - 255A9E38BCE069FD5BD5AA7B2554059D /* SDWebImageDownloaderConfig.m */, | |
| 1153 | - 8F0B0EB007B67E5D110E4AA7E75CC5E8 /* SDWebImageDownloaderDecryptor.h */, | |
| 1154 | - 5566B7FA1592DB68F47F538060773A34 /* SDWebImageDownloaderDecryptor.m */, | |
| 1155 | - E5A710E84F3BA6FCB0CFF41E78AD5CBD /* SDWebImageDownloaderOperation.h */, | |
| 1156 | - 9998D272F6C21B92ECDBCC87B232F260 /* SDWebImageDownloaderOperation.m */, | |
| 1157 | - FDF39D0D9A539DD852E83070D546838D /* SDWebImageDownloaderRequestModifier.h */, | |
| 1158 | - B75EE1C0C625093DB3961800DCB992E6 /* SDWebImageDownloaderRequestModifier.m */, | |
| 1159 | - 968801418C5808212099C7AAECFD942F /* SDWebImageDownloaderResponseModifier.h */, | |
| 1160 | - 0804ADB1BA257EF0FBCE5877305E5CBA /* SDWebImageDownloaderResponseModifier.m */, | |
| 1161 | - 03964B173BAD2879E938A697CDE23E58 /* SDWebImageError.h */, | |
| 1162 | - 0A70D2708290382BD7D9078C968FDBFD /* SDWebImageError.m */, | |
| 1163 | - 176BE9B96FD0004A2FDAD77CA2B59BEF /* SDWebImageIndicator.h */, | |
| 1164 | - F71C63A56CAAF9072729B55B779D9414 /* SDWebImageIndicator.m */, | |
| 1165 | - 2FBBBA584888406A53BBAB4C8E646119 /* SDWebImageManager.h */, | |
| 1166 | - 4294BEEA87AE1F76B25087B05E8A9958 /* SDWebImageManager.m */, | |
| 1167 | - 491254BCC101B0465D55540272375AB3 /* SDWebImageOperation.h */, | |
| 1168 | - C550536A6B0FFCC49930C911A1A845CA /* SDWebImageOperation.m */, | |
| 1169 | - D60E08CE2DF723239081CE2F04FA6324 /* SDWebImageOptionsProcessor.h */, | |
| 1170 | - 4A1019E03A5B1C662AEA03A27BAD9451 /* SDWebImageOptionsProcessor.m */, | |
| 1171 | - A2B670A4915027A69D8298ABAE7832C5 /* SDWebImagePrefetcher.h */, | |
| 1172 | - 6721C57EE2049316FC7DFA0EC2F61B33 /* SDWebImagePrefetcher.m */, | |
| 1173 | - 060133C4A0CD84D7E43EA5A6AE35A7BA /* SDWebImageTransition.h */, | |
| 1174 | - 7136C53C3E86DF97021DEAC46C3AF414 /* SDWebImageTransition.m */, | |
| 1175 | - DF0BE15112187DE13F59F20FD37196BF /* SDWebImageTransitionInternal.h */, | |
| 1176 | - ECCFB33F5B2FAFCB9059F1EA4872AD5E /* UIButton+WebCache.h */, | |
| 1177 | - 03C7B13F9A65433A2099280BB0853B83 /* UIButton+WebCache.m */, | |
| 1178 | - 9DD82D69E6F6CA677C0FD0DB1910BEEB /* UIColor+SDHexString.h */, | |
| 1179 | - 1062A5D5F16F52CCF19B547AC48CFF6B /* UIColor+SDHexString.m */, | |
| 1180 | - 885401F9AE5B59CB193871CFBB1551CC /* UIImage+ExtendedCacheData.h */, | |
| 1181 | - 20421D13A41D462848F051647414A829 /* UIImage+ExtendedCacheData.m */, | |
| 1182 | - D1A63106E180D500BA4681CBFF159C50 /* UIImage+ForceDecode.h */, | |
| 1183 | - 4423F2AF5E01BBBB5F27784F5DA57247 /* UIImage+ForceDecode.m */, | |
| 1184 | - 3A20F815CD4F1A80CA68C34C3039D331 /* UIImage+GIF.h */, | |
| 1185 | - 3C7A36D864638BFBD8FEE3A451FAC9B3 /* UIImage+GIF.m */, | |
| 1186 | - 1780A6FB6896D6EE58CA176A32A91167 /* UIImage+MemoryCacheCost.h */, | |
| 1187 | - 4F30AC9537E6584F35D8DD4C10EDB7B1 /* UIImage+MemoryCacheCost.m */, | |
| 1188 | - C54648ED166C9850805DF18B9BF1A305 /* UIImage+Metadata.h */, | |
| 1189 | - EFFC73CFCA9A8BA73DF3B34FE5E9C8B0 /* UIImage+Metadata.m */, | |
| 1190 | - 03A09A7D80E19CC940BE2323D0536D61 /* UIImage+MultiFormat.h */, | |
| 1191 | - 82CFF2AD22CF5568454DF140CCC1FBC4 /* UIImage+MultiFormat.m */, | |
| 1192 | - 615E0DE04702B1FE637909AB79E77479 /* UIImage+Transform.h */, | |
| 1193 | - 77BDAC0316DE945EDC00877B001E3F13 /* UIImage+Transform.m */, | |
| 1194 | - C6064257443573B6B4428384FE55B429 /* UIImageView+HighlightedWebCache.h */, | |
| 1195 | - D99CAD8BB03A1ED3ACC306DE0083743C /* UIImageView+HighlightedWebCache.m */, | |
| 1196 | - B083F58677FB62CBAA120E34B5932133 /* UIImageView+WebCache.h */, | |
| 1197 | - 7F204DC3ADE5CAA2617773E3A9EFDDBB /* UIImageView+WebCache.m */, | |
| 1198 | - 64D193C84163B92004E21BE9A8A13B71 /* UIView+WebCache.h */, | |
| 1199 | - 5573ECAD013B67C3DCA80D7EFBDE031B /* UIView+WebCache.m */, | |
| 1200 | - 9B17144987DDC3673503BAA63081322E /* UIView+WebCacheOperation.h */, | |
| 1201 | - DA18D81BDAB5332971532C646A936989 /* UIView+WebCacheOperation.m */, | |
| 1202 | - ); | |
| 1203 | - name = Core; | |
| 1204 | - sourceTree = "<group>"; | |
| 1205 | - }; | |
| 1206 | 1018 | 2114D1F9BC187D61883E9A4E077458A4 /* ToolView */ = { |
| 1207 | 1019 | isa = PBXGroup; |
| 1208 | 1020 | children = ( |
| ... | ... | @@ -1255,6 +1067,149 @@ |
| 1255 | 1067 | name = Frameworks; |
| 1256 | 1068 | sourceTree = "<group>"; |
| 1257 | 1069 | }; |
| 1070 | + 418B8500CC0BC65A0DE0B609A2F36DA8 /* Core */ = { | |
| 1071 | + isa = PBXGroup; | |
| 1072 | + children = ( | |
| 1073 | + 480531E7E6576BA8EBC67D80A2410524 /* NSBezierPath+RoundedCorners.h */, | |
| 1074 | + DFFBF564BC41F65FF3EF9F404A3FF8A5 /* NSBezierPath+RoundedCorners.m */, | |
| 1075 | + F59687F8773BB30C3383C0C4473BA5A9 /* NSButton+WebCache.h */, | |
| 1076 | + 88B758940E94222028625182D6DD5C48 /* NSButton+WebCache.m */, | |
| 1077 | + EBC3A38B3CF4356703DC4ABF85E1FB8C /* NSData+ImageContentType.h */, | |
| 1078 | + 6BF16A9C9A9AF5DDC141A40D41D0467E /* NSData+ImageContentType.m */, | |
| 1079 | + 8C0EBBBE53B935FF0453555166C8BD82 /* NSImage+Compatibility.h */, | |
| 1080 | + CB33D1B5F3A87441C78240849B1BD409 /* NSImage+Compatibility.m */, | |
| 1081 | + CCFF6195D3943C3B2EE93D641F705287 /* SDAnimatedImage.h */, | |
| 1082 | + 994DDB7514B65007DB23743EE9419955 /* SDAnimatedImage.m */, | |
| 1083 | + 6F7A1C78766D1A651D4233A02DFD21C1 /* SDAnimatedImageRep.h */, | |
| 1084 | + 45487E9C2D9132F54E6DD142FDADCBAF /* SDAnimatedImageRep.m */, | |
| 1085 | + D25E5ABBC1DC5FB5597B7FD6AF7395A6 /* SDAnimatedImageView.h */, | |
| 1086 | + 2594CEE3269A686FE6A32ADF1ACDA903 /* SDAnimatedImageView.m */, | |
| 1087 | + 458C3BA863BEC4A0D1766E7096A16EF8 /* SDAnimatedImageView+WebCache.h */, | |
| 1088 | + 523A9DF244F75BFD8EF7183295D79237 /* SDAnimatedImageView+WebCache.m */, | |
| 1089 | + CA2F973E303B162092C59FA182AC2842 /* SDAsyncBlockOperation.h */, | |
| 1090 | + 95D767BEAA3A22D8C4B4F881F593EA55 /* SDAsyncBlockOperation.m */, | |
| 1091 | + 85323CE74E87D9048ABFE6CB1D80BCB5 /* SDDiskCache.h */, | |
| 1092 | + 17822DDCEE5C075412F1B1A731F006F2 /* SDDiskCache.m */, | |
| 1093 | + CB003CB825038F390A91BFD066D5DC11 /* SDImageAPNGCoder.h */, | |
| 1094 | + F4BDDDF94411952465D7BEFFCA8B5C29 /* SDImageAPNGCoder.m */, | |
| 1095 | + B836409E7407CD373408BBEE6FB78A56 /* SDImageAssetManager.h */, | |
| 1096 | + 26EEACAD4CFF038839E5CAE01FC51426 /* SDImageAssetManager.m */, | |
| 1097 | + 92986682144C6A680D1688CC72DB03EB /* SDImageCache.h */, | |
| 1098 | + 4C86D29287795201B7A91BA858DBC2FB /* SDImageCache.m */, | |
| 1099 | + 880ED7B5A8CB58EE4EE46F97AAFC7934 /* SDImageCacheConfig.h */, | |
| 1100 | + EBAB61DD2D434A28A27FC5DFC9B7D499 /* SDImageCacheConfig.m */, | |
| 1101 | + 843DE7A9D5751B6D1E4B542142E88BE5 /* SDImageCacheDefine.h */, | |
| 1102 | + D3B294F209BE90C307D3B79D646A580E /* SDImageCacheDefine.m */, | |
| 1103 | + EF4C3869889BF6E0FB48DB6D3E50C42B /* SDImageCachesManager.h */, | |
| 1104 | + 14AEC03CE74FA3C1ED22FD08ACDC489F /* SDImageCachesManager.m */, | |
| 1105 | + 0E9E88F1E31A013B69A717855A9A782E /* SDImageCachesManagerOperation.h */, | |
| 1106 | + A2EE608D10670E27D666BCB148BE76A8 /* SDImageCachesManagerOperation.m */, | |
| 1107 | + B5F772E2006AB9FCF216A22126D6D46F /* SDImageCoder.h */, | |
| 1108 | + 2FD9BD14816B4B34D6B032B14FCBCD17 /* SDImageCoder.m */, | |
| 1109 | + 5820AFD9CB1F531DEEEA85AE53BA9FB1 /* SDImageCoderHelper.h */, | |
| 1110 | + 8DE00CB7B46BD9384E27CFF44A22F3D6 /* SDImageCoderHelper.m */, | |
| 1111 | + 106CDD63C990007C4EBED229576FD0E6 /* SDImageCodersManager.h */, | |
| 1112 | + 7A3758E1F2262F48C18DEA44579E7F23 /* SDImageCodersManager.m */, | |
| 1113 | + 3F679F8EE0717580BF2DF10529B314ED /* SDImageFrame.h */, | |
| 1114 | + 0D7D182C7944184D8687D02BC5895C8A /* SDImageFrame.m */, | |
| 1115 | + FB9F487DEA2EE1223E588AF5B7968BBC /* SDImageGIFCoder.h */, | |
| 1116 | + 29332085AB2D0312202A5E4DA9903355 /* SDImageGIFCoder.m */, | |
| 1117 | + AAF8FE9BD2DF30E81C73D0170BA7C814 /* SDImageGraphics.h */, | |
| 1118 | + E2F6363B89177C5ED56B90058D1B1B9A /* SDImageGraphics.m */, | |
| 1119 | + 1EE818633CBD870C5763EC5A7DEEFEBB /* SDImageHEICCoder.h */, | |
| 1120 | + DF6A0A2DCDCF701127D57F57D20CEE46 /* SDImageHEICCoder.m */, | |
| 1121 | + E1824D23FFCDBDE557E8BCF4A5D1EB64 /* SDImageHEICCoderInternal.h */, | |
| 1122 | + C54E545CC107D12C2F5AA2887BAF107E /* SDImageIOAnimatedCoder.h */, | |
| 1123 | + BF2240205CFBA63D171F27ED059DA17F /* SDImageIOAnimatedCoder.m */, | |
| 1124 | + 74C01AF8051358A2AD340A5AB3505F28 /* SDImageIOAnimatedCoderInternal.h */, | |
| 1125 | + 7DC9E6937FC0DCAFBFE9BC1CC778D6C9 /* SDImageIOCoder.h */, | |
| 1126 | + 7492D3D26ACA17BE066949BC5402EFA6 /* SDImageIOCoder.m */, | |
| 1127 | + 0F882F7E87C969BC4F446959C4C96507 /* SDImageLoader.h */, | |
| 1128 | + 0AA629F1636B9E5C1E7779416F41894F /* SDImageLoader.m */, | |
| 1129 | + FBAFB1147F9F60F82F67F2F93767AEA8 /* SDImageLoadersManager.h */, | |
| 1130 | + D5EFE1BA58FE69FA738DCB9784D3B2E0 /* SDImageLoadersManager.m */, | |
| 1131 | + 662B362504EE532B6C5EAA6DEDDC5D23 /* SDImageTransformer.h */, | |
| 1132 | + 78D88E09C574752B379AC19B8561A84F /* SDImageTransformer.m */, | |
| 1133 | + D0BFF09BFCD201810684D60E49FC29B3 /* SDInternalMacros.h */, | |
| 1134 | + 565EA3FF9DE0069950D12760CD92E6DF /* SDInternalMacros.m */, | |
| 1135 | + 2C6338E013B6CE8A040D3B94EC208F53 /* SDMemoryCache.h */, | |
| 1136 | + DCA9751DEFA2CAEA416E397CD0197E4C /* SDMemoryCache.m */, | |
| 1137 | + ACDF74FCCC69765D4B60B3DBEC369C3D /* SDmetamacros.h */, | |
| 1138 | + EDCF5C73C34D7FE7CBD5AEC45E26DD16 /* SDWeakProxy.h */, | |
| 1139 | + FF96D9B286912D2041A6038E44BF9D78 /* SDWeakProxy.m */, | |
| 1140 | + AD998B4EBF0CD700BD542833326015DB /* SDWebImage.h */, | |
| 1141 | + 2C68FD0A33D48BF8511F5E1F0AF5F38C /* SDWebImageCacheKeyFilter.h */, | |
| 1142 | + 3C89C4C20801869E17ED28D5BC0002C7 /* SDWebImageCacheKeyFilter.m */, | |
| 1143 | + 631A43488B8C087EA660030CD2484EA9 /* SDWebImageCacheSerializer.h */, | |
| 1144 | + E6AC77D76359DA3AB60BBECA32896CFA /* SDWebImageCacheSerializer.m */, | |
| 1145 | + 3BAFBDA5FBFB046872240DAA694DBA9D /* SDWebImageCompat.h */, | |
| 1146 | + 4EB6A999880D99C4B8EAE70EC4D73221 /* SDWebImageCompat.m */, | |
| 1147 | + BBC835DD376D230B30079993F2F5CDAA /* SDWebImageDefine.h */, | |
| 1148 | + EB79E7A300B9098CE8EED7EB98A1E5AA /* SDWebImageDefine.m */, | |
| 1149 | + FD9DAE7E5EAD3CA463241E107ADB319B /* SDWebImageDownloader.h */, | |
| 1150 | + C2DE3B8DDA43BF244A83FA3A8E49B9C4 /* SDWebImageDownloader.m */, | |
| 1151 | + 22D6E01939BAAB30A2190ACA1D161CDB /* SDWebImageDownloaderConfig.h */, | |
| 1152 | + 9B69A0F6649EAEED316A983843ED5614 /* SDWebImageDownloaderConfig.m */, | |
| 1153 | + 6076834A27CA897C42FFDA170BDE4715 /* SDWebImageDownloaderOperation.h */, | |
| 1154 | + 0027B01676377B9218BE8AA537BDAA8A /* SDWebImageDownloaderOperation.m */, | |
| 1155 | + 82DA1AE31B883B0A558F1A7C451C5411 /* SDWebImageDownloaderRequestModifier.h */, | |
| 1156 | + 1A7213E5D815346B024AC2C78B59AE7E /* SDWebImageDownloaderRequestModifier.m */, | |
| 1157 | + B93B5CB4F97B4C63233C9781D9074385 /* SDWebImageError.h */, | |
| 1158 | + 4D82E5E2C22405F57D03467E23EA118F /* SDWebImageError.m */, | |
| 1159 | + AD9AD3087AA0C54D99784B1E96B8F385 /* SDWebImageIndicator.h */, | |
| 1160 | + C343BEA71DA4406F27A27215550DB0CA /* SDWebImageIndicator.m */, | |
| 1161 | + 645FAD055E96DC89E3CF7A287A4B4F87 /* SDWebImageManager.h */, | |
| 1162 | + C0F853EDBA5EE0AFD5FF80DF4E069774 /* SDWebImageManager.m */, | |
| 1163 | + 3977DF74625040A3E0128C656F9FA8D0 /* SDWebImageOperation.h */, | |
| 1164 | + 5E7D951E27DDF1D0327C691AC350863B /* SDWebImageOptionsProcessor.h */, | |
| 1165 | + 9A2C5A33CC842DF0109E16A40FED6D58 /* SDWebImageOptionsProcessor.m */, | |
| 1166 | + 6E0438EB685599B92473E4BBB56C9271 /* SDWebImagePrefetcher.h */, | |
| 1167 | + A3F033ABEC9F3EFAA01FDA65E76374B4 /* SDWebImagePrefetcher.m */, | |
| 1168 | + E8864E2BCB6F0A60BF7660FD5CA61884 /* SDWebImageTransition.h */, | |
| 1169 | + 6F4A5B2FFD435932DC069C91BA243B8A /* SDWebImageTransition.m */, | |
| 1170 | + E028311EA2C17015A8136F9F9A3DEEEC /* UIButton+WebCache.h */, | |
| 1171 | + 604FBD4A36B51CB23593D6E7144E0A66 /* UIButton+WebCache.m */, | |
| 1172 | + 5E4DCEAC007F7F72A2323A6304B0F4A4 /* UIColor+HexString.h */, | |
| 1173 | + 8D082DCD13F9572880B69B6E5DBA621E /* UIColor+HexString.m */, | |
| 1174 | + 8D8872339E7C6C556DCFC2B144D97747 /* UIImage+ForceDecode.h */, | |
| 1175 | + DD7EB188DA7D4BC587FE249FF628B51C /* UIImage+ForceDecode.m */, | |
| 1176 | + 03917DDCF8C121DD56B0AD9B603C2B9D /* UIImage+GIF.h */, | |
| 1177 | + 9D4F696743A974B8507BEF6FB323BB62 /* UIImage+GIF.m */, | |
| 1178 | + 45EBF80603A6BB114FFDF460A6A20CC7 /* UIImage+MemoryCacheCost.h */, | |
| 1179 | + 23C27D070CBE7191DD5328960C7C772E /* UIImage+MemoryCacheCost.m */, | |
| 1180 | + C8CF816C63E5B6559556C778BE819AF4 /* UIImage+Metadata.h */, | |
| 1181 | + C090D5ECCFD39D2D4DF00BFB1D9DAB81 /* UIImage+Metadata.m */, | |
| 1182 | + CF824EAADAAA9D61882AC1E95A4FAAC5 /* UIImage+MultiFormat.h */, | |
| 1183 | + 2FB82601936A52D10C46ABDED4C4D68E /* UIImage+MultiFormat.m */, | |
| 1184 | + DDF0A0D18F37DBE6D852FCEA2251F1C1 /* UIImage+Transform.h */, | |
| 1185 | + 81C7DA27208415129BC75A3AE0EC610D /* UIImage+Transform.m */, | |
| 1186 | + 397498F9C1EC4E17B000928E2E9A2551 /* UIImageView+HighlightedWebCache.h */, | |
| 1187 | + 4E907072812DC6E02160321606CBFFD2 /* UIImageView+HighlightedWebCache.m */, | |
| 1188 | + 4532E0D4D1C1FCB630416F347E791110 /* UIImageView+WebCache.h */, | |
| 1189 | + 42406C450631485B971273EE79B37A12 /* UIImageView+WebCache.m */, | |
| 1190 | + 0847D06FD8D970FB3747D3FFE1EF1A98 /* UIView+WebCache.h */, | |
| 1191 | + 6C25A06B05CE4932A05E03D9A5B91E1A /* UIView+WebCache.m */, | |
| 1192 | + 2B9F2CAB3EBC390CC9C5DF6FEB4AE54E /* UIView+WebCacheOperation.h */, | |
| 1193 | + 6821ACBD9902AD3AEC5766052616BEFC /* UIView+WebCacheOperation.m */, | |
| 1194 | + ); | |
| 1195 | + name = Core; | |
| 1196 | + sourceTree = "<group>"; | |
| 1197 | + }; | |
| 1198 | + 4A12BD7E0F24F7DA5CB75AC152DCA427 /* Support Files */ = { | |
| 1199 | + isa = PBXGroup; | |
| 1200 | + children = ( | |
| 1201 | + 9190FDE4BAFCFE9EEEC32C362D54FC14 /* SDWebImage.modulemap */, | |
| 1202 | + 1FB1475C6AAE3E931553C57D2012437B /* SDWebImage-dummy.m */, | |
| 1203 | + A4015B1017950B192730F1ABF2793542 /* SDWebImage-Info.plist */, | |
| 1204 | + 2E14AFE886371F80BB03C9261CAE653A /* SDWebImage-prefix.pch */, | |
| 1205 | + 159B608142C5AD0E99E00479F64CDAFE /* SDWebImage-umbrella.h */, | |
| 1206 | + 35974735D558DD140EC7A519306676BF /* SDWebImage.debug.xcconfig */, | |
| 1207 | + 8B5C5257F6B18F69C086B439A25052BD /* SDWebImage.release.xcconfig */, | |
| 1208 | + ); | |
| 1209 | + name = "Support Files"; | |
| 1210 | + path = "../Target Support Files/SDWebImage"; | |
| 1211 | + sourceTree = "<group>"; | |
| 1212 | + }; | |
| 1258 | 1213 | 6395BBC4FE7C6C41AE1CB6A3363066BD /* Targets Support Files */ = { |
| 1259 | 1214 | isa = PBXGroup; |
| 1260 | 1215 | children = ( |
| ... | ... | @@ -1289,21 +1244,6 @@ |
| 1289 | 1244 | path = Image; |
| 1290 | 1245 | sourceTree = "<group>"; |
| 1291 | 1246 | }; |
| 1292 | - 710F178F0547C8EE314E14F2AB2C4124 /* Support Files */ = { | |
| 1293 | - isa = PBXGroup; | |
| 1294 | - children = ( | |
| 1295 | - 3E74798ACDDA5B166130859C04575723 /* SDWebImage.modulemap */, | |
| 1296 | - 61733D38B2BF61692321B0EAD6CE7AAC /* SDWebImage-dummy.m */, | |
| 1297 | - 15DA0DE7F827744C2CD1C503B90ED22A /* SDWebImage-Info.plist */, | |
| 1298 | - 3AEC8F623A6884FBFC7CF8D4309918D7 /* SDWebImage-prefix.pch */, | |
| 1299 | - 2DED8461605A23446E943D5B44AC07FB /* SDWebImage-umbrella.h */, | |
| 1300 | - 3937A5FCAE6FD5C9CBFD132D61702EB0 /* SDWebImage.debug.xcconfig */, | |
| 1301 | - 69B6E48A6A7BF7FDA397F18D808442A2 /* SDWebImage.release.xcconfig */, | |
| 1302 | - ); | |
| 1303 | - name = "Support Files"; | |
| 1304 | - path = "../Target Support Files/SDWebImage"; | |
| 1305 | - sourceTree = "<group>"; | |
| 1306 | - }; | |
| 1307 | 1247 | 7681CA34E755E133CA6962CC78CCA732 /* YBImageBrowser */ = { |
| 1308 | 1248 | isa = PBXGroup; |
| 1309 | 1249 | children = ( |
| ... | ... | @@ -1321,6 +1261,16 @@ |
| 1321 | 1261 | path = YBImageBrowser_DSCnliveShop/Classes/YBImageBrowser; |
| 1322 | 1262 | sourceTree = "<group>"; |
| 1323 | 1263 | }; |
| 1264 | + 7A014A40B4BE421CD0E89DA824A04413 /* SDWebImage */ = { | |
| 1265 | + isa = PBXGroup; | |
| 1266 | + children = ( | |
| 1267 | + 418B8500CC0BC65A0DE0B609A2F36DA8 /* Core */, | |
| 1268 | + 4A12BD7E0F24F7DA5CB75AC152DCA427 /* Support Files */, | |
| 1269 | + ); | |
| 1270 | + name = SDWebImage; | |
| 1271 | + path = SDWebImage; | |
| 1272 | + sourceTree = "<group>"; | |
| 1273 | + }; | |
| 1324 | 1274 | 9A9577D5B370441D1926FE268E305F56 /* Resources */ = { |
| 1325 | 1275 | isa = PBXGroup; |
| 1326 | 1276 | children = ( |
| ... | ... | @@ -1348,7 +1298,7 @@ |
| 1348 | 1298 | A2BE8DF77D03508B9B8418BD9602255F /* Pods */ = { |
| 1349 | 1299 | isa = PBXGroup; |
| 1350 | 1300 | children = ( |
| 1351 | - FEF90DB2DC962AA8A54D42B042F65B9E /* SDWebImage */, | |
| 1301 | + 7A014A40B4BE421CD0E89DA824A04413 /* SDWebImage */, | |
| 1352 | 1302 | B0A9653E4CBB5BBF0D27A9511C0EE8C4 /* YYKit */, |
| 1353 | 1303 | ); |
| 1354 | 1304 | name = Pods; |
| ... | ... | @@ -1661,16 +1611,6 @@ |
| 1661 | 1611 | name = Frameworks; |
| 1662 | 1612 | sourceTree = "<group>"; |
| 1663 | 1613 | }; |
| 1664 | - FEF90DB2DC962AA8A54D42B042F65B9E /* SDWebImage */ = { | |
| 1665 | - isa = PBXGroup; | |
| 1666 | - children = ( | |
| 1667 | - 1A858AEA06D9DB5413EC15E1834061B8 /* Core */, | |
| 1668 | - 710F178F0547C8EE314E14F2AB2C4124 /* Support Files */, | |
| 1669 | - ); | |
| 1670 | - name = SDWebImage; | |
| 1671 | - path = SDWebImage; | |
| 1672 | - sourceTree = "<group>"; | |
| 1673 | - }; | |
| 1674 | 1614 | FF6E94A47A5FB0D3A3409B902104CDC9 /* Helper */ = { |
| 1675 | 1615 | isa = PBXGroup; |
| 1676 | 1616 | children = ( |
| ... | ... | @@ -1846,84 +1786,74 @@ |
| 1846 | 1786 | ); |
| 1847 | 1787 | runOnlyForDeploymentPostprocessing = 0; |
| 1848 | 1788 | }; |
| 1849 | - CB6048343884143F7919689F2F9BEEA2 /* Headers */ = { | |
| 1789 | + CA4065646A60ED133DABD1609AE9B77F /* Headers */ = { | |
| 1850 | 1790 | isa = PBXHeadersBuildPhase; |
| 1851 | 1791 | buildActionMask = 2147483647; |
| 1852 | 1792 | files = ( |
| 1853 | - D0725567B7BD18C79A04E5EC9C72249D /* NSBezierPath+SDRoundedCorners.h in Headers */, | |
| 1854 | - 449AF3A1E1DEFBD47B2411DAD0E5D6CC /* NSButton+WebCache.h in Headers */, | |
| 1855 | - EB634403E13B36687931F62769C04F66 /* NSData+ImageContentType.h in Headers */, | |
| 1856 | - 9C6F61B6DD8964A03128BB996BCCCDF5 /* NSImage+Compatibility.h in Headers */, | |
| 1857 | - 1201437E196032353D4D2B2DF8206775 /* SDAnimatedImage.h in Headers */, | |
| 1858 | - 9B0ADFBD0EE010BC1AE32B290FAF2D70 /* SDAnimatedImagePlayer.h in Headers */, | |
| 1859 | - 86A92CFC75F685F5805824C81ED34DD9 /* SDAnimatedImageRep.h in Headers */, | |
| 1860 | - 6F14B66A0031F8CD2DBD49D05F285A5A /* SDAnimatedImageView+WebCache.h in Headers */, | |
| 1861 | - 40DD3721BA61598A56ECF57BB1C45EE8 /* SDAnimatedImageView.h in Headers */, | |
| 1862 | - 85B91AFDF4CF2F4FB54D35AE96CB02DE /* SDAssociatedObject.h in Headers */, | |
| 1863 | - 7C9BCCE2BE2AB0F74617E9638E8383E2 /* SDAsyncBlockOperation.h in Headers */, | |
| 1864 | - 09EB95CBDF8D54EB05C26A5196EBBB65 /* SDDeviceHelper.h in Headers */, | |
| 1865 | - DE311CA167D40330E2B71F4726A6B789 /* SDDiskCache.h in Headers */, | |
| 1866 | - 1367682CED02F22D43F248A0E36CC17B /* SDDisplayLink.h in Headers */, | |
| 1867 | - 69FC796803AADF6F7D78E034F759E07A /* SDFileAttributeHelper.h in Headers */, | |
| 1868 | - 5BCB8102AFF58BDD96E0C059F9B88BB5 /* SDGraphicsImageRenderer.h in Headers */, | |
| 1869 | - C88E97ED465D3973A3D9FD7AE94BDB9A /* SDImageAPNGCoder.h in Headers */, | |
| 1870 | - 8860B7C942F4FDAC599E545DEC6E0446 /* SDImageAssetManager.h in Headers */, | |
| 1871 | - 9140B89832569466DC295558951FF9A4 /* SDImageCache.h in Headers */, | |
| 1872 | - 0CD7B135FD4B84BDB1FB8727A2F85550 /* SDImageCacheConfig.h in Headers */, | |
| 1873 | - A26011648EA7CD910788DBBF08C36F32 /* SDImageCacheDefine.h in Headers */, | |
| 1874 | - E9B97B2FD84DF4015AABD7E5978A710F /* SDImageCachesManager.h in Headers */, | |
| 1875 | - 78A8F86E5996E580294B65E304C65F6A /* SDImageCachesManagerOperation.h in Headers */, | |
| 1876 | - 8BE030582BFA5590BC7A1EB1A7E8DDC4 /* SDImageCoder.h in Headers */, | |
| 1877 | - 285BB197A61A0553905D872B6E4F6BA1 /* SDImageCoderHelper.h in Headers */, | |
| 1878 | - 47CFA5C583D7B3BFD0FBAD1F1A474913 /* SDImageCodersManager.h in Headers */, | |
| 1879 | - 5C5058FC446A9C6C4F3FA70C2121A267 /* SDImageFrame.h in Headers */, | |
| 1880 | - 12A76A691E704E6EBE12CC888639C31A /* SDImageGIFCoder.h in Headers */, | |
| 1881 | - 7829F86094FA530717C4AF09DFA1FCB7 /* SDImageGraphics.h in Headers */, | |
| 1882 | - 4F227430C16CAB3FF65A1488229BF46A /* SDImageHEICCoder.h in Headers */, | |
| 1883 | - D347FCF56E468483A546E1F611DE081C /* SDImageHEICCoderInternal.h in Headers */, | |
| 1884 | - 79140F3DB1DFA9969EF7EA809862461B /* SDImageIOAnimatedCoder.h in Headers */, | |
| 1885 | - EA50654643EF702D7F2DD17534459EAB /* SDImageIOAnimatedCoderInternal.h in Headers */, | |
| 1886 | - D6FDFE95CEDBD0A41D4E16FDB1599FA9 /* SDImageIOCoder.h in Headers */, | |
| 1887 | - 104CBAC9F34C7B8475A096C4B0ACA3A0 /* SDImageLoader.h in Headers */, | |
| 1888 | - 858BA6CE212BDE681F7B8EC99CDEA5A2 /* SDImageLoadersManager.h in Headers */, | |
| 1889 | - 949BA4CC204D826571EA4E85BA769DB7 /* SDImageTransformer.h in Headers */, | |
| 1890 | - 561EAFCC4AA4A4FFA55319ACF371D31C /* SDInternalMacros.h in Headers */, | |
| 1891 | - FC4DE0456F37E3F47195E5F969314E0F /* SDMemoryCache.h in Headers */, | |
| 1892 | - 183F84DC6D79A0F93AE6C13F2EDDDCD8 /* SDmetamacros.h in Headers */, | |
| 1893 | - 5E96F449788433CD16C308CA4C4974AB /* SDWeakProxy.h in Headers */, | |
| 1894 | - 1A04C35F3E2D85CFCAFC9934EAC8E033 /* SDWebImage-umbrella.h in Headers */, | |
| 1895 | - 64F3EB426774D6F1D593DBFAFFBF6791 /* SDWebImage.h in Headers */, | |
| 1896 | - FEF33326D4B5B59DFD0CA1DFAD4001FC /* SDWebImageCacheKeyFilter.h in Headers */, | |
| 1897 | - DFE7857272AA4CDEC686248E790174F9 /* SDWebImageCacheSerializer.h in Headers */, | |
| 1898 | - 010A21434427A1E7CE25060BA3A66A61 /* SDWebImageCompat.h in Headers */, | |
| 1899 | - CBA469E2DD8702DECB634A81F850C516 /* SDWebImageDefine.h in Headers */, | |
| 1900 | - 9C39FA3EB2A9462B249432F655FC9AA8 /* SDWebImageDownloader.h in Headers */, | |
| 1901 | - A3A38FFF99F8F65D21F6526D4D257230 /* SDWebImageDownloaderConfig.h in Headers */, | |
| 1902 | - C854CD2F89E00E88FB1D6669A770DEE0 /* SDWebImageDownloaderDecryptor.h in Headers */, | |
| 1903 | - CF1AA8850ED16C5F49B61BC3A9B13DD7 /* SDWebImageDownloaderOperation.h in Headers */, | |
| 1904 | - 6B8E9A4250E31C61FFB2FA44B1ED587D /* SDWebImageDownloaderRequestModifier.h in Headers */, | |
| 1905 | - 02A4C8ABD5DCC501DE7A6CE19B398E14 /* SDWebImageDownloaderResponseModifier.h in Headers */, | |
| 1906 | - 95D70798AF08A9AF6AC0455ABAC50B31 /* SDWebImageError.h in Headers */, | |
| 1907 | - B6A52B7697F15B487F846F3DA1CB3896 /* SDWebImageIndicator.h in Headers */, | |
| 1908 | - FC5E54109CC0090D7CA4492C6225E5BB /* SDWebImageManager.h in Headers */, | |
| 1909 | - CD06DC5FCA424D8A0928068BEB8AF2E5 /* SDWebImageOperation.h in Headers */, | |
| 1910 | - DA1F5EB06521252BF63369AFEF914368 /* SDWebImageOptionsProcessor.h in Headers */, | |
| 1911 | - B52576B08EFC9D67F218CC2DAC542AF4 /* SDWebImagePrefetcher.h in Headers */, | |
| 1912 | - 02B6598C52131C10E3CA344FB49B87FA /* SDWebImageTransition.h in Headers */, | |
| 1913 | - 71C055BCF544D98F47CCFB404A9157A0 /* SDWebImageTransitionInternal.h in Headers */, | |
| 1914 | - 7320BE37CC5564C9200656A346D16D7C /* UIButton+WebCache.h in Headers */, | |
| 1915 | - 41E823881385B837FA086E301CBBB87C /* UIColor+SDHexString.h in Headers */, | |
| 1916 | - 758D45C8E630A9B2A29746AFAB257929 /* UIImage+ExtendedCacheData.h in Headers */, | |
| 1917 | - 56D4C3BEBAF6D7B57123C4A919EDFC4D /* UIImage+ForceDecode.h in Headers */, | |
| 1918 | - A1B62D4B373543D743AC938090EF65F2 /* UIImage+GIF.h in Headers */, | |
| 1919 | - 7BDCFF16AD5094651DDF91E007A194A1 /* UIImage+MemoryCacheCost.h in Headers */, | |
| 1920 | - CCEF1E548BE78064BE12CC29D9977A28 /* UIImage+Metadata.h in Headers */, | |
| 1921 | - 7CB9508A6133F4674F3358339F62CF03 /* UIImage+MultiFormat.h in Headers */, | |
| 1922 | - DCDC5264F294AB9A622D368F2F7FA336 /* UIImage+Transform.h in Headers */, | |
| 1923 | - 42BB3098DC0E47748C6AD61A10575859 /* UIImageView+HighlightedWebCache.h in Headers */, | |
| 1924 | - 9212629910630E2F8888272B38EA81E4 /* UIImageView+WebCache.h in Headers */, | |
| 1925 | - 033813F58E3D20FA511AF1B5C3D58FA7 /* UIView+WebCache.h in Headers */, | |
| 1926 | - 21C120EDFCE3F1B685833EAE2F088998 /* UIView+WebCacheOperation.h in Headers */, | |
| 1793 | + 2BB48CC4F4CCB6ED239A7116C1399192 /* NSBezierPath+RoundedCorners.h in Headers */, | |
| 1794 | + C8719B604AC23450E05D0E2F5716C8EE /* NSButton+WebCache.h in Headers */, | |
| 1795 | + E1A13F65E327E70ED0A0322ED9D4E004 /* NSData+ImageContentType.h in Headers */, | |
| 1796 | + 584691DE6F6DC43CCB28E2164DDD65C5 /* NSImage+Compatibility.h in Headers */, | |
| 1797 | + 5B6E86C662422D902876E9564F7D0D62 /* SDAnimatedImage.h in Headers */, | |
| 1798 | + F9CD37EE6DD796D86FAFCE65C106D553 /* SDAnimatedImageRep.h in Headers */, | |
| 1799 | + E807BB2D53EF822DDA0109BEB8F33F4B /* SDAnimatedImageView+WebCache.h in Headers */, | |
| 1800 | + F7C220B780BE3FFD43D49EB09A4AA120 /* SDAnimatedImageView.h in Headers */, | |
| 1801 | + 56D932D22CCE25078DDC72863C793EB6 /* SDAsyncBlockOperation.h in Headers */, | |
| 1802 | + 89AA4B620BAF006802F7FE16331FBB03 /* SDDiskCache.h in Headers */, | |
| 1803 | + F4A2A3265060EE0EC36AE153BA2F11F1 /* SDImageAPNGCoder.h in Headers */, | |
| 1804 | + 31C885C264ACBC869D0C15774FEEEE91 /* SDImageAssetManager.h in Headers */, | |
| 1805 | + CED0ADFAFACBD8EAC91D8FDFAD72CC3D /* SDImageCache.h in Headers */, | |
| 1806 | + 4A63641D8EA2784EA3ED6DE31D3EEE7B /* SDImageCacheConfig.h in Headers */, | |
| 1807 | + 6E23CCE1DD2C5694FB3733EF5969C2BA /* SDImageCacheDefine.h in Headers */, | |
| 1808 | + 1D8DC86B542A5C7B185D576593BFEF08 /* SDImageCachesManager.h in Headers */, | |
| 1809 | + 07ECBE230ADCE64A5E565EAC5608FE06 /* SDImageCachesManagerOperation.h in Headers */, | |
| 1810 | + 3F1C17F8ED3A2719985697A88379D691 /* SDImageCoder.h in Headers */, | |
| 1811 | + 41D2B74D60CECB9A13273FEA70EB0853 /* SDImageCoderHelper.h in Headers */, | |
| 1812 | + 765CF9D27014B63D63045C295D14D47F /* SDImageCodersManager.h in Headers */, | |
| 1813 | + 4E303A392C14264AF2A7846A47904C0E /* SDImageFrame.h in Headers */, | |
| 1814 | + A9FB0B1C38B3DF1982D4D8F8B3B99A4E /* SDImageGIFCoder.h in Headers */, | |
| 1815 | + A522F73D14A2CB4DE43E00754C6D504B /* SDImageGraphics.h in Headers */, | |
| 1816 | + 0A12ECF7CCD9D053812435656179FE07 /* SDImageHEICCoder.h in Headers */, | |
| 1817 | + 3402867F1DCE2F01EE152BE666D15391 /* SDImageHEICCoderInternal.h in Headers */, | |
| 1818 | + DB7CB011D38A0CF4CBA6380FF04F0B61 /* SDImageIOAnimatedCoder.h in Headers */, | |
| 1819 | + 4FB58F2A627219E59C6002407BA17370 /* SDImageIOAnimatedCoderInternal.h in Headers */, | |
| 1820 | + 16EBE72F21A776BA4F5FA1B43DA0D550 /* SDImageIOCoder.h in Headers */, | |
| 1821 | + 9F8771C9472203AC8A6B882D32E081FD /* SDImageLoader.h in Headers */, | |
| 1822 | + 66E7DB4A06FD62E3319504FA066A159D /* SDImageLoadersManager.h in Headers */, | |
| 1823 | + 93EEC3D112C8D5BAF8202BBB7C0F8D40 /* SDImageTransformer.h in Headers */, | |
| 1824 | + B241B25BC7903216B219BCFDD5533ED2 /* SDInternalMacros.h in Headers */, | |
| 1825 | + 0897E820C9A330AEE938549F3A202047 /* SDMemoryCache.h in Headers */, | |
| 1826 | + CB6B765C0485EA0801AC5AD27B988336 /* SDmetamacros.h in Headers */, | |
| 1827 | + EC2A8CA5F7249A4197E707E8008C2CAF /* SDWeakProxy.h in Headers */, | |
| 1828 | + 78C4797B83602657490272FB5AC87882 /* SDWebImage-umbrella.h in Headers */, | |
| 1829 | + 31486EEF2AE7067DC3FB4C41D8B06044 /* SDWebImage.h in Headers */, | |
| 1830 | + B1635A0F2A9E883F5F9478F04F5F9B00 /* SDWebImageCacheKeyFilter.h in Headers */, | |
| 1831 | + 83A3C38994C1BE0F1B3FDC74FF3EB86E /* SDWebImageCacheSerializer.h in Headers */, | |
| 1832 | + B27865F2F8513D2BAF80C119865014B2 /* SDWebImageCompat.h in Headers */, | |
| 1833 | + D9B0AE61DB0C28C1A453C57DBAA9894C /* SDWebImageDefine.h in Headers */, | |
| 1834 | + FC5F561CA670D699F300DDA4FE2D8314 /* SDWebImageDownloader.h in Headers */, | |
| 1835 | + 9A0E1A1BFFD28A2746792BE8D568E3AC /* SDWebImageDownloaderConfig.h in Headers */, | |
| 1836 | + 571964893E54957A53F88749EA22E79B /* SDWebImageDownloaderOperation.h in Headers */, | |
| 1837 | + CA2A04B40C4584BB62EDF451D4691393 /* SDWebImageDownloaderRequestModifier.h in Headers */, | |
| 1838 | + 1A645DC3F75D98F78F685E7E8172E6C4 /* SDWebImageError.h in Headers */, | |
| 1839 | + 5BB4DED775A9AB9259E214C9543F2409 /* SDWebImageIndicator.h in Headers */, | |
| 1840 | + DBB84BD7F62230F01B7533CF5DB8E2B8 /* SDWebImageManager.h in Headers */, | |
| 1841 | + 5D93304CCA386D1CA921179A22788088 /* SDWebImageOperation.h in Headers */, | |
| 1842 | + B9EAA2FEBC24879CE426A200D1943850 /* SDWebImageOptionsProcessor.h in Headers */, | |
| 1843 | + FA626556DE0DB5DBE98269492EB9D858 /* SDWebImagePrefetcher.h in Headers */, | |
| 1844 | + FA1132270226AEC00FD163A760F5BFDD /* SDWebImageTransition.h in Headers */, | |
| 1845 | + 972F3D3004A38B2E91B514317462F912 /* UIButton+WebCache.h in Headers */, | |
| 1846 | + AA4B92512944686F23ABE5632656872E /* UIColor+HexString.h in Headers */, | |
| 1847 | + 130C29DD67F0DACDAA2E6A57DA2422D7 /* UIImage+ForceDecode.h in Headers */, | |
| 1848 | + 06012BECF3390F6D209D81ABC29DEE7F /* UIImage+GIF.h in Headers */, | |
| 1849 | + D4C9FCF4108BF46522DA445E47524A6A /* UIImage+MemoryCacheCost.h in Headers */, | |
| 1850 | + 21C54761AEC4B6FF8F628CF62503856C /* UIImage+Metadata.h in Headers */, | |
| 1851 | + 43367367332A88EC53B2BEA287BAA3DD /* UIImage+MultiFormat.h in Headers */, | |
| 1852 | + 11631B3F15728204C488D6CF17DA63BF /* UIImage+Transform.h in Headers */, | |
| 1853 | + 6B841305B372900E43EAD6CF233EA695 /* UIImageView+HighlightedWebCache.h in Headers */, | |
| 1854 | + 06EF6A665BCC7FDFD85BD8ABD55A3959 /* UIImageView+WebCache.h in Headers */, | |
| 1855 | + 902A0F8F36BB0CD612BD333AB538FFC0 /* UIView+WebCache.h in Headers */, | |
| 1856 | + 768B0529984555456940B969FB3B0C5B /* UIView+WebCacheOperation.h in Headers */, | |
| 1927 | 1857 | ); |
| 1928 | 1858 | runOnlyForDeploymentPostprocessing = 0; |
| 1929 | 1859 | }; |
| ... | ... | @@ -2000,12 +1930,12 @@ |
| 2000 | 1930 | }; |
| 2001 | 1931 | 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { |
| 2002 | 1932 | isa = PBXNativeTarget; |
| 2003 | - buildConfigurationList = AC6F755EB18559BA16F3A7501A53F36A /* Build configuration list for PBXNativeTarget "SDWebImage" */; | |
| 1933 | + buildConfigurationList = 74451F5A9D7B9165630F6C64F97C5913 /* Build configuration list for PBXNativeTarget "SDWebImage" */; | |
| 2004 | 1934 | buildPhases = ( |
| 2005 | - CB6048343884143F7919689F2F9BEEA2 /* Headers */, | |
| 2006 | - 6B33B89724E2F1127E0B67158DDEA242 /* Sources */, | |
| 2007 | - 93E1803EFFB49B8B5D9BE9C3FF15E708 /* Frameworks */, | |
| 2008 | - D6D70F7565EE0DD3BC12CD0BB42B01A8 /* Resources */, | |
| 1935 | + CA4065646A60ED133DABD1609AE9B77F /* Headers */, | |
| 1936 | + BAD7BFF6FC8F0397DB86C139AF674045 /* Sources */, | |
| 1937 | + ECEA1B04AA580BD337B52CB84D1C00A8 /* Frameworks */, | |
| 1938 | + 016B131B0F6F68BCBAE6DB01E3F25349 /* Resources */, | |
| 2009 | 1939 | ); |
| 2010 | 1940 | buildRules = ( |
| 2011 | 1941 | ); |
| ... | ... | @@ -2068,37 +1998,37 @@ |
| 2068 | 1998 | /* End PBXProject section */ |
| 2069 | 1999 | |
| 2070 | 2000 | /* Begin PBXResourcesBuildPhase section */ |
| 2071 | - 04E5F5CBE7ACCFB62968403927984C4D /* Resources */ = { | |
| 2001 | + 016B131B0F6F68BCBAE6DB01E3F25349 /* Resources */ = { | |
| 2072 | 2002 | isa = PBXResourcesBuildPhase; |
| 2073 | 2003 | buildActionMask = 2147483647; |
| 2074 | 2004 | files = ( |
| 2075 | - 54B786B4C13CB1CF2A1D5BFA8E223872 /* YBImageBrowser.bundle in Resources */, | |
| 2076 | - 8908C0789F324444C029342D5462093E /* YBImageBrowserVideo.bundle in Resources */, | |
| 2077 | 2005 | ); |
| 2078 | 2006 | runOnlyForDeploymentPostprocessing = 0; |
| 2079 | 2007 | }; |
| 2080 | - 1B5D0ACC6DCF897D7CF6F5B8A6D36155 /* Resources */ = { | |
| 2008 | + 04E5F5CBE7ACCFB62968403927984C4D /* Resources */ = { | |
| 2081 | 2009 | isa = PBXResourcesBuildPhase; |
| 2082 | 2010 | buildActionMask = 2147483647; |
| 2083 | 2011 | files = ( |
| 2012 | + 54B786B4C13CB1CF2A1D5BFA8E223872 /* YBImageBrowser.bundle in Resources */, | |
| 2013 | + 8908C0789F324444C029342D5462093E /* YBImageBrowserVideo.bundle in Resources */, | |
| 2084 | 2014 | ); |
| 2085 | 2015 | runOnlyForDeploymentPostprocessing = 0; |
| 2086 | 2016 | }; |
| 2087 | - 419C229B6C5AA15382BC7E9ABB6926B5 /* Resources */ = { | |
| 2017 | + 1B5D0ACC6DCF897D7CF6F5B8A6D36155 /* Resources */ = { | |
| 2088 | 2018 | isa = PBXResourcesBuildPhase; |
| 2089 | 2019 | buildActionMask = 2147483647; |
| 2090 | 2020 | files = ( |
| 2091 | 2021 | ); |
| 2092 | 2022 | runOnlyForDeploymentPostprocessing = 0; |
| 2093 | 2023 | }; |
| 2094 | - 4C79C6E06B50883D4F5B69556511C7D0 /* Resources */ = { | |
| 2024 | + 419C229B6C5AA15382BC7E9ABB6926B5 /* Resources */ = { | |
| 2095 | 2025 | isa = PBXResourcesBuildPhase; |
| 2096 | 2026 | buildActionMask = 2147483647; |
| 2097 | 2027 | files = ( |
| 2098 | 2028 | ); |
| 2099 | 2029 | runOnlyForDeploymentPostprocessing = 0; |
| 2100 | 2030 | }; |
| 2101 | - D6D70F7565EE0DD3BC12CD0BB42B01A8 /* Resources */ = { | |
| 2031 | + 4C79C6E06B50883D4F5B69556511C7D0 /* Resources */ = { | |
| 2102 | 2032 | isa = PBXResourcesBuildPhase; |
| 2103 | 2033 | buildActionMask = 2147483647; |
| 2104 | 2034 | files = ( |
| ... | ... | @@ -2205,79 +2135,69 @@ |
| 2205 | 2135 | ); |
| 2206 | 2136 | runOnlyForDeploymentPostprocessing = 0; |
| 2207 | 2137 | }; |
| 2208 | - 6B33B89724E2F1127E0B67158DDEA242 /* Sources */ = { | |
| 2138 | + BAD7BFF6FC8F0397DB86C139AF674045 /* Sources */ = { | |
| 2209 | 2139 | isa = PBXSourcesBuildPhase; |
| 2210 | 2140 | buildActionMask = 2147483647; |
| 2211 | 2141 | files = ( |
| 2212 | - 14C2D66D5EC7A892325562A7830E78D4 /* NSBezierPath+SDRoundedCorners.m in Sources */, | |
| 2213 | - EC14B2E8E460DFC2E4EB78A9FC10117C /* NSButton+WebCache.m in Sources */, | |
| 2214 | - 64CB4C39356EDD005F3104B820F4B299 /* NSData+ImageContentType.m in Sources */, | |
| 2215 | - 3E404F1C1EF06355EBCAD17AAA6A7655 /* NSImage+Compatibility.m in Sources */, | |
| 2216 | - 28B63809D42D68F3E44A2012695EC8E8 /* SDAnimatedImage.m in Sources */, | |
| 2217 | - 826CC80A43888E4B01B8C0F546CCEB4C /* SDAnimatedImagePlayer.m in Sources */, | |
| 2218 | - 27E23C72CC1BAD100D8F8E52A77E0DED /* SDAnimatedImageRep.m in Sources */, | |
| 2219 | - 84996105619FE8603B904EBD8CAF4650 /* SDAnimatedImageView+WebCache.m in Sources */, | |
| 2220 | - 4458F0F06DDB8ED606F8089B51DE2857 /* SDAnimatedImageView.m in Sources */, | |
| 2221 | - 9A63822674C925980BCE24CF9162F224 /* SDAssociatedObject.m in Sources */, | |
| 2222 | - D43B9E05CBF3046EB696F0357E263B54 /* SDAsyncBlockOperation.m in Sources */, | |
| 2223 | - 292DFB006819CC5C457430933E9DF2CC /* SDDeviceHelper.m in Sources */, | |
| 2224 | - DB42064F83C6224213B940B249FC26FF /* SDDiskCache.m in Sources */, | |
| 2225 | - 3BAC7E6B28028F929677080D34286C9A /* SDDisplayLink.m in Sources */, | |
| 2226 | - FFA5793DBEE9AB3CC5C01F5B6F0B1151 /* SDFileAttributeHelper.m in Sources */, | |
| 2227 | - 725C541DA4309D9A2CE04EA1BAC9DB05 /* SDGraphicsImageRenderer.m in Sources */, | |
| 2228 | - 477600BAE7223A59EC2D341F7EAA0C5B /* SDImageAPNGCoder.m in Sources */, | |
| 2229 | - BD1CC866FEB3E8226394BA640E7FA900 /* SDImageAssetManager.m in Sources */, | |
| 2230 | - 198D45399940A52F6AD442B5F96A24A1 /* SDImageCache.m in Sources */, | |
| 2231 | - 8A1D68B08A42906461750649F460B63E /* SDImageCacheConfig.m in Sources */, | |
| 2232 | - 69979E7EF7E1322AF64B9D04EC5DC4FC /* SDImageCacheDefine.m in Sources */, | |
| 2233 | - 3FE529AB19EA206854B9668E508D927B /* SDImageCachesManager.m in Sources */, | |
| 2234 | - 14E9103FD1B1EFBE7BA8EE1137810EB2 /* SDImageCachesManagerOperation.m in Sources */, | |
| 2235 | - 451775744CDDD8A2805CCC5FAAE96FE6 /* SDImageCoder.m in Sources */, | |
| 2236 | - CC1B7B642CBAEA58A27D410B329E5FFD /* SDImageCoderHelper.m in Sources */, | |
| 2237 | - BDACD97A89128CDAECEE9F2C66A68041 /* SDImageCodersManager.m in Sources */, | |
| 2238 | - D2EDDDAA1E3498604C570DA06526C7BA /* SDImageFrame.m in Sources */, | |
| 2239 | - D4F67B56B3A2910031B248E07BC0FF9F /* SDImageGIFCoder.m in Sources */, | |
| 2240 | - 44F7C039A4502CB6ABFE93BC1626ADAF /* SDImageGraphics.m in Sources */, | |
| 2241 | - 5C11EACACCF1A59EC89E212517D471D2 /* SDImageHEICCoder.m in Sources */, | |
| 2242 | - 89A6805309AE158EA70271058AD04DAC /* SDImageIOAnimatedCoder.m in Sources */, | |
| 2243 | - 521A2AB2326986DDA7210B222799D82D /* SDImageIOCoder.m in Sources */, | |
| 2244 | - B34DA9789249B559F7D135CDC3D4FD77 /* SDImageLoader.m in Sources */, | |
| 2245 | - 013FB3424E97C9CBA093B58F3FF74537 /* SDImageLoadersManager.m in Sources */, | |
| 2246 | - 6F52C02EB7BEBB28BEF797764940E83D /* SDImageTransformer.m in Sources */, | |
| 2247 | - 19BA863C27D0A5BBD664CB1ABDA03238 /* SDInternalMacros.m in Sources */, | |
| 2248 | - 8D7206334016EF356DD5C06DB743927A /* SDMemoryCache.m in Sources */, | |
| 2249 | - 9B9C593A401B16CA1F27613B33259116 /* SDWeakProxy.m in Sources */, | |
| 2250 | - 3526C8C7BD0C5256C819AEB8DE26BC80 /* SDWebImage-dummy.m in Sources */, | |
| 2251 | - F045BDBF956B9EE5340F3225336EDAC6 /* SDWebImageCacheKeyFilter.m in Sources */, | |
| 2252 | - 46E5579E12DEE8B0B0E8B4BD484303AF /* SDWebImageCacheSerializer.m in Sources */, | |
| 2253 | - DD784DFACF8863C7D46B9054B0DD7C42 /* SDWebImageCompat.m in Sources */, | |
| 2254 | - E48B7D3309D22470B53A3EB47B6577E7 /* SDWebImageDefine.m in Sources */, | |
| 2255 | - AB811350CFBFEC402845394DFB11C5B9 /* SDWebImageDownloader.m in Sources */, | |
| 2256 | - C94DE8F907543852C6C5311CE0A2752A /* SDWebImageDownloaderConfig.m in Sources */, | |
| 2257 | - 5EC0E24AEBC97BED8827D6824B20AEA3 /* SDWebImageDownloaderDecryptor.m in Sources */, | |
| 2258 | - 9058F00D7FB0F44089EA7418C9BE80CD /* SDWebImageDownloaderOperation.m in Sources */, | |
| 2259 | - A8F9213841A1696CA4E3BAF5B0836F43 /* SDWebImageDownloaderRequestModifier.m in Sources */, | |
| 2260 | - EA5AE4148E9B9228E70EDB7F575D111E /* SDWebImageDownloaderResponseModifier.m in Sources */, | |
| 2261 | - C32C3C747D6831244FA97E55D7EBC211 /* SDWebImageError.m in Sources */, | |
| 2262 | - C71E6525587D5FFE318A222C092FA6AE /* SDWebImageIndicator.m in Sources */, | |
| 2263 | - 92253035C5C62FC047813B453A47011B /* SDWebImageManager.m in Sources */, | |
| 2264 | - 461394E1264BA539807AE22B6681037D /* SDWebImageOperation.m in Sources */, | |
| 2265 | - CAD57C741FFBC3EBCA19E4F1891E4FDA /* SDWebImageOptionsProcessor.m in Sources */, | |
| 2266 | - ED388349310FF50899F3AEB5E2DF0500 /* SDWebImagePrefetcher.m in Sources */, | |
| 2267 | - 7A39F3B62173880BC1A1E872B2B0DE19 /* SDWebImageTransition.m in Sources */, | |
| 2268 | - C8D1A63DACC1ED208C203641C69EEEF1 /* UIButton+WebCache.m in Sources */, | |
| 2269 | - F4BE0CAF1D4BF04D766DB4A25AE4A4C2 /* UIColor+SDHexString.m in Sources */, | |
| 2270 | - 3D269D2B6E70D5134F84F471FA897C1D /* UIImage+ExtendedCacheData.m in Sources */, | |
| 2271 | - 66794E1E249B57756C75632B1CF7AA7A /* UIImage+ForceDecode.m in Sources */, | |
| 2272 | - 34E8A42A4CD18CF55A1C5CBD1F222D71 /* UIImage+GIF.m in Sources */, | |
| 2273 | - 8B74D26ECDC0A95EADFD2FE3D6044F45 /* UIImage+MemoryCacheCost.m in Sources */, | |
| 2274 | - 90B45AE4B48040DD4DF7B2521A41FA93 /* UIImage+Metadata.m in Sources */, | |
| 2275 | - B6B6619A760B666DE47643F684DCF92A /* UIImage+MultiFormat.m in Sources */, | |
| 2276 | - 9CBF5A5EFC5491417ACEF9D2D6F604DD /* UIImage+Transform.m in Sources */, | |
| 2277 | - 271841B1A02A31A896499240CC233E7A /* UIImageView+HighlightedWebCache.m in Sources */, | |
| 2278 | - 580A58EB2DC597145BE726FF15B7B980 /* UIImageView+WebCache.m in Sources */, | |
| 2279 | - 16B189FD50EB941DDBCEF3718C511381 /* UIView+WebCache.m in Sources */, | |
| 2280 | - 8D6092C5708543E1975D21EF342829A9 /* UIView+WebCacheOperation.m in Sources */, | |
| 2142 | + 8AAEE8B8F842102CB770F4A2C286AEE0 /* NSBezierPath+RoundedCorners.m in Sources */, | |
| 2143 | + 13B7C26AFEF7B9A9BB71D6340836C1D2 /* NSButton+WebCache.m in Sources */, | |
| 2144 | + C15872A8795C18D17D7CB78D0D2AF5A9 /* NSData+ImageContentType.m in Sources */, | |
| 2145 | + DDA63B6A16CAEC9EDAB8721409ED65EF /* NSImage+Compatibility.m in Sources */, | |
| 2146 | + 642B272637AFE100C01566715BE9A90E /* SDAnimatedImage.m in Sources */, | |
| 2147 | + AAB78C68578015956BFE8A56A7E02BA7 /* SDAnimatedImageRep.m in Sources */, | |
| 2148 | + 8B3648DF3CD6DCE1F23B154EEC9F47BC /* SDAnimatedImageView+WebCache.m in Sources */, | |
| 2149 | + 7BE352AC96A490424A89542C59B92D27 /* SDAnimatedImageView.m in Sources */, | |
| 2150 | + 6419E84A00BD1CC2D89FBD11DBA95B35 /* SDAsyncBlockOperation.m in Sources */, | |
| 2151 | + F855CDFE0F0B48A22F8F0B4CD25E3F2A /* SDDiskCache.m in Sources */, | |
| 2152 | + F0AB74AED6D7C008445C01678F59B54D /* SDImageAPNGCoder.m in Sources */, | |
| 2153 | + 66ABFE235C4A3EE1284E40B26EC06E50 /* SDImageAssetManager.m in Sources */, | |
| 2154 | + CBEDB718B4AB4391588A9347C9F03C4A /* SDImageCache.m in Sources */, | |
| 2155 | + 9BE4B66909D27FA2DEE5D7B4DAF83DD5 /* SDImageCacheConfig.m in Sources */, | |
| 2156 | + B0D15842F6D9B27F7E656D6A3D715329 /* SDImageCacheDefine.m in Sources */, | |
| 2157 | + 43413AE961CEDF130DB347D12953F90F /* SDImageCachesManager.m in Sources */, | |
| 2158 | + 720BDB7561A9BF9FAA229655BF6BAACB /* SDImageCachesManagerOperation.m in Sources */, | |
| 2159 | + 2987181816CE330B8D8C8011A163DED5 /* SDImageCoder.m in Sources */, | |
| 2160 | + E4C4C17E15D7F01D31091341E3B22767 /* SDImageCoderHelper.m in Sources */, | |
| 2161 | + 6C9E415ACF9DBBF5276A439ECA83FF41 /* SDImageCodersManager.m in Sources */, | |
| 2162 | + B81B452FC4B5B6F7812022013E0050F9 /* SDImageFrame.m in Sources */, | |
| 2163 | + C926C81B2AE4D970FF43FA6854DF11B3 /* SDImageGIFCoder.m in Sources */, | |
| 2164 | + EBD6DC15D9DA29829CD9A5BA5F2B2A76 /* SDImageGraphics.m in Sources */, | |
| 2165 | + 91EC5D1276C67BD151CE0945E99D346B /* SDImageHEICCoder.m in Sources */, | |
| 2166 | + 1A696C66B1AD121F4D74F70046E722BE /* SDImageIOAnimatedCoder.m in Sources */, | |
| 2167 | + 637C07DAF593E361026C13455CED3356 /* SDImageIOCoder.m in Sources */, | |
| 2168 | + 3CBE3496D679F3CAC215C24E124CEF20 /* SDImageLoader.m in Sources */, | |
| 2169 | + A93168D1B8FE647836641A8FD0960D3F /* SDImageLoadersManager.m in Sources */, | |
| 2170 | + 9F45ED51FB250F999DF9EEE26706306F /* SDImageTransformer.m in Sources */, | |
| 2171 | + C50CAA073FFEC5DFDB16A59830E97C95 /* SDInternalMacros.m in Sources */, | |
| 2172 | + E159EA4B9CE7CA4EA7CC422F1BB359D0 /* SDMemoryCache.m in Sources */, | |
| 2173 | + 69B78205FADBA6F82DD7D8842E744559 /* SDWeakProxy.m in Sources */, | |
| 2174 | + 7296ED68E239CF8323284C327EFD34DB /* SDWebImage-dummy.m in Sources */, | |
| 2175 | + CF5BBB5AA6B556A33F0FD0CBF107B538 /* SDWebImageCacheKeyFilter.m in Sources */, | |
| 2176 | + 773F599C7937832DC3E3C3F5FC41A2BF /* SDWebImageCacheSerializer.m in Sources */, | |
| 2177 | + 9AA98747F0FFCB4629345C58F9DFF9A2 /* SDWebImageCompat.m in Sources */, | |
| 2178 | + A24ECE056F5DC1A130E45CD9DFDDAE9D /* SDWebImageDefine.m in Sources */, | |
| 2179 | + 8095235275C7774DBD0439AEBF02EBF9 /* SDWebImageDownloader.m in Sources */, | |
| 2180 | + FD42C3773D4CE1E4ED8BC78369EE4898 /* SDWebImageDownloaderConfig.m in Sources */, | |
| 2181 | + 55F81E8A4E05DCEA1424C070100D7A08 /* SDWebImageDownloaderOperation.m in Sources */, | |
| 2182 | + 3768A48148C1A559EFA6857AEE21499C /* SDWebImageDownloaderRequestModifier.m in Sources */, | |
| 2183 | + 27117846D36D17C67AD6B0BC49819C2E /* SDWebImageError.m in Sources */, | |
| 2184 | + 7AA1932AD1AADADB7084C1120E353441 /* SDWebImageIndicator.m in Sources */, | |
| 2185 | + 5F7825DA2B38AE6F113742CD8640B6A5 /* SDWebImageManager.m in Sources */, | |
| 2186 | + 22AC8168428AA91CEFCC4A1EE18C61A1 /* SDWebImageOptionsProcessor.m in Sources */, | |
| 2187 | + E05830BFF728135BC1A3FCD86B02AFED /* SDWebImagePrefetcher.m in Sources */, | |
| 2188 | + F981FD60C717579B06FC77EBE5E3ECEE /* SDWebImageTransition.m in Sources */, | |
| 2189 | + B2D122DFC079570A5A257B8FEFE1CF4C /* UIButton+WebCache.m in Sources */, | |
| 2190 | + 8B36C6BD6BC521D6EBFAA6C06204C8AE /* UIColor+HexString.m in Sources */, | |
| 2191 | + 3A717A936244852C7999DF2ACDD3EBA4 /* UIImage+ForceDecode.m in Sources */, | |
| 2192 | + 4B010F01929654CD157576546C2CA5E5 /* UIImage+GIF.m in Sources */, | |
| 2193 | + 9F69D6D21857F40138D7EF02C9934F61 /* UIImage+MemoryCacheCost.m in Sources */, | |
| 2194 | + D84BE358D7B1195BCA3556D7A0003968 /* UIImage+Metadata.m in Sources */, | |
| 2195 | + 09291E0580080AF730970F2DE20C6F2F /* UIImage+MultiFormat.m in Sources */, | |
| 2196 | + 4A295CDE35C0C3A0C3BDC83BAEEBC8D1 /* UIImage+Transform.m in Sources */, | |
| 2197 | + 4E5C5A91108AA66D06C8D32C62266D23 /* UIImageView+HighlightedWebCache.m in Sources */, | |
| 2198 | + FB731F3EEA54F44A238FBBFED93D9974 /* UIImageView+WebCache.m in Sources */, | |
| 2199 | + 873613A08846E4C11A3D0504EF738DD3 /* UIView+WebCache.m in Sources */, | |
| 2200 | + C60409B7C6D34D479F3DC7157194706B /* UIView+WebCacheOperation.m in Sources */, | |
| 2281 | 2201 | ); |
| 2282 | 2202 | runOnlyForDeploymentPostprocessing = 0; |
| 2283 | 2203 | }; |
| ... | ... | @@ -2417,9 +2337,9 @@ |
| 2417 | 2337 | }; |
| 2418 | 2338 | name = Release; |
| 2419 | 2339 | }; |
| 2420 | - 0E0881E1CF6CB5CB69A59B5DB8946635 /* Release */ = { | |
| 2340 | + 0D51E6D665830E8C0F6875C54D2AC40B /* Release */ = { | |
| 2421 | 2341 | isa = XCBuildConfiguration; |
| 2422 | - baseConfigurationReference = 69B6E48A6A7BF7FDA397F18D808442A2 /* SDWebImage.release.xcconfig */; | |
| 2342 | + baseConfigurationReference = 8B5C5257F6B18F69C086B439A25052BD /* SDWebImage.release.xcconfig */; | |
| 2423 | 2343 | buildSettings = { |
| 2424 | 2344 | CODE_SIGN_IDENTITY = ""; |
| 2425 | 2345 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; |
| ... | ... | @@ -2449,37 +2369,6 @@ |
| 2449 | 2369 | }; |
| 2450 | 2370 | name = Release; |
| 2451 | 2371 | }; |
| 2452 | - 10ED6ADB52D8B1FCFB0CF456419C6894 /* Debug */ = { | |
| 2453 | - isa = XCBuildConfiguration; | |
| 2454 | - baseConfigurationReference = 3937A5FCAE6FD5C9CBFD132D61702EB0 /* SDWebImage.debug.xcconfig */; | |
| 2455 | - buildSettings = { | |
| 2456 | - CODE_SIGN_IDENTITY = ""; | |
| 2457 | - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; | |
| 2458 | - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; | |
| 2459 | - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; | |
| 2460 | - CURRENT_PROJECT_VERSION = 1; | |
| 2461 | - DEFINES_MODULE = YES; | |
| 2462 | - DYLIB_COMPATIBILITY_VERSION = 1; | |
| 2463 | - DYLIB_CURRENT_VERSION = 1; | |
| 2464 | - DYLIB_INSTALL_NAME_BASE = "@rpath"; | |
| 2465 | - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; | |
| 2466 | - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; | |
| 2467 | - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; | |
| 2468 | - IPHONEOS_DEPLOYMENT_TARGET = 8.0; | |
| 2469 | - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; | |
| 2470 | - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; | |
| 2471 | - PRODUCT_MODULE_NAME = SDWebImage; | |
| 2472 | - PRODUCT_NAME = SDWebImage; | |
| 2473 | - SDKROOT = iphoneos; | |
| 2474 | - SKIP_INSTALL = YES; | |
| 2475 | - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; | |
| 2476 | - SWIFT_VERSION = 4.0; | |
| 2477 | - TARGETED_DEVICE_FAMILY = "1,2"; | |
| 2478 | - VERSIONING_SYSTEM = "apple-generic"; | |
| 2479 | - VERSION_INFO_PREFIX = ""; | |
| 2480 | - }; | |
| 2481 | - name = Debug; | |
| 2482 | - }; | |
| 2483 | 2372 | 314845AEFA52C16806836E92F522B3DA /* Debug */ = { |
| 2484 | 2373 | isa = XCBuildConfiguration; |
| 2485 | 2374 | baseConfigurationReference = D2A8889944F3D4BE1188A99F60D3CA7A /* YYKit.debug.xcconfig */; |
| ... | ... | @@ -2730,6 +2619,37 @@ |
| 2730 | 2619 | }; |
| 2731 | 2620 | name = Debug; |
| 2732 | 2621 | }; |
| 2622 | + BEA610A857E2D8D010A0A55145F83675 /* Debug */ = { | |
| 2623 | + isa = XCBuildConfiguration; | |
| 2624 | + baseConfigurationReference = 35974735D558DD140EC7A519306676BF /* SDWebImage.debug.xcconfig */; | |
| 2625 | + buildSettings = { | |
| 2626 | + CODE_SIGN_IDENTITY = ""; | |
| 2627 | + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; | |
| 2628 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; | |
| 2629 | + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; | |
| 2630 | + CURRENT_PROJECT_VERSION = 1; | |
| 2631 | + DEFINES_MODULE = YES; | |
| 2632 | + DYLIB_COMPATIBILITY_VERSION = 1; | |
| 2633 | + DYLIB_CURRENT_VERSION = 1; | |
| 2634 | + DYLIB_INSTALL_NAME_BASE = "@rpath"; | |
| 2635 | + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; | |
| 2636 | + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; | |
| 2637 | + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; | |
| 2638 | + IPHONEOS_DEPLOYMENT_TARGET = 8.0; | |
| 2639 | + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; | |
| 2640 | + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; | |
| 2641 | + PRODUCT_MODULE_NAME = SDWebImage; | |
| 2642 | + PRODUCT_NAME = SDWebImage; | |
| 2643 | + SDKROOT = iphoneos; | |
| 2644 | + SKIP_INSTALL = YES; | |
| 2645 | + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; | |
| 2646 | + SWIFT_VERSION = 4.0; | |
| 2647 | + TARGETED_DEVICE_FAMILY = "1,2"; | |
| 2648 | + VERSIONING_SYSTEM = "apple-generic"; | |
| 2649 | + VERSION_INFO_PREFIX = ""; | |
| 2650 | + }; | |
| 2651 | + name = Debug; | |
| 2652 | + }; | |
| 2733 | 2653 | E795E7E265DDC88CE4D069201368C872 /* Release */ = { |
| 2734 | 2654 | isa = XCBuildConfiguration; |
| 2735 | 2655 | baseConfigurationReference = C6E9A2826ED6D4338904F22C672B4751 /* Pods-YBImageBrowser_DSCnliveShop_Tests.release.xcconfig */; |
| ... | ... | @@ -2869,11 +2789,11 @@ |
| 2869 | 2789 | defaultConfigurationIsVisible = 0; |
| 2870 | 2790 | defaultConfigurationName = Release; |
| 2871 | 2791 | }; |
| 2872 | - AC6F755EB18559BA16F3A7501A53F36A /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { | |
| 2792 | + 74451F5A9D7B9165630F6C64F97C5913 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { | |
| 2873 | 2793 | isa = XCConfigurationList; |
| 2874 | 2794 | buildConfigurations = ( |
| 2875 | - 10ED6ADB52D8B1FCFB0CF456419C6894 /* Debug */, | |
| 2876 | - 0E0881E1CF6CB5CB69A59B5DB8946635 /* Release */, | |
| 2795 | + BEA610A857E2D8D010A0A55145F83675 /* Debug */, | |
| 2796 | + 0D51E6D665830E8C0F6875C54D2AC40B /* Release */, | |
| 2877 | 2797 | ); |
| 2878 | 2798 | defaultConfigurationIsVisible = 0; |
| 2879 | 2799 | defaultConfigurationName = Release; | ... | ... |
Example/Pods/SDWebImage/README.md
| ... | ... | @@ -19,9 +19,8 @@ This library provides an async image downloader with cache support. For convenie |
| 19 | 19 | - [x] Categories for `UIImageView`, `UIButton`, `MKAnnotationView` adding web image and cache management |
| 20 | 20 | - [x] An asynchronous image downloader |
| 21 | 21 | - [x] An asynchronous memory + disk image caching with automatic cache expiration handling |
| 22 | -- [x] A background image decompression to avoid frame rate drop | |
| 23 | -- [x] [Progressive image loading](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#progressive-animation) (including animated image, like GIF showing in Web browser) | |
| 24 | -- [x] [Thumbnail image decoding](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#thumbnail-decoding-550) to save CPU && Memory for large images | |
| 22 | +- [x] A background image decompression | |
| 23 | +- [x] Progressive image loading (including animated image, like GIF showing in Web browser) | |
| 25 | 24 | - [x] [Extendable image coder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#custom-coder-420) to support massive image format, like WebP |
| 26 | 25 | - [x] [Full-stack solution for animated images](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#animated-image-50) which keep a balance between CPU && Memory |
| 27 | 26 | - [x] [Customizable and composable transformations](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#transformer-50) can be applied to the images right after download |
| ... | ... | @@ -37,11 +36,11 @@ This library provides an async image downloader with cache support. For convenie |
| 37 | 36 | |
| 38 | 37 | ## Supported Image Formats |
| 39 | 38 | |
| 40 | -- Image formats supported by Apple system (JPEG, PNG, TIFF, HEIC, ...), including GIF/APNG/HEIC animation | |
| 39 | +- Image formats supported by UIImage (JPEG, PNG, HEIC, ...), including GIF/APNG/HEIC animation | |
| 41 | 40 | - WebP format, including animated WebP (use the [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder) project) |
| 42 | 41 | - Support extendable coder plugins for new image formats like BPG, AVIF. And vector format like PDF, SVG. See all the list in [Image coder plugin List](https://github.com/SDWebImage/SDWebImage/wiki/Coder-Plugin-List) |
| 43 | 42 | |
| 44 | -## Additional modules and Ecosystem | |
| 43 | +## Additional modules | |
| 45 | 44 | |
| 46 | 45 | In order to keep SDWebImage focused and limited to the core features, but also allow extensibility and custom behaviors, during the 5.0 refactoring we focused on modularizing the library. |
| 47 | 46 | As such, we have moved/built new modules to [SDWebImage org](https://github.com/SDWebImage). |
| ... | ... | @@ -49,47 +48,29 @@ As such, we have moved/built new modules to [SDWebImage org](https://github.com/ |
| 49 | 48 | #### SwiftUI |
| 50 | 49 | [SwiftUI](https://developer.apple.com/xcode/swiftui/) is an innovative UI framework written in Swift to build user interfaces across all Apple platforms. |
| 51 | 50 | |
| 52 | -We support SwiftUI by building a brand new framework called [SDWebImageSwiftUI](https://github.com/SDWebImage/SDWebImageSwiftUI), which is built on top of SDWebImage core functions (caching, loading and animation). | |
| 53 | - | |
| 54 | -The new framework introduce two View structs `WebImage` and `AnimatedImage` for SwiftUI world, `ImageIndicator` modifier for any View, `ImageManager` observable object for data source. Supports iOS 13+/macOS 10.15+/tvOS 13+/watchOS 6+ and Swift 5.1. Have a nice try and provide feedback! | |
| 51 | +We support SwiftUI by building with the functions (caching, loading and animation) powered by SDWebImage. You can have a try with [SDWebImageSwiftUI](https://github.com/SDWebImage/SDWebImageSwiftUI) | |
| 55 | 52 | |
| 56 | 53 | #### Coders for additional image formats |
| 57 | -- [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder) - coder for WebP format. Based on [libwebp](https://chromium.googlesource.com/webm/libwebp) | |
| 58 | -- [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder) - coder for HEIF format, iOS 8+/macOS 10.10+ support. Based on [libheif](https://github.com/strukturag/libheif) | |
| 59 | -- [SDWebImageBPGCoder](https://github.com/SDWebImage/SDWebImageBPGCoder) - coder for BPG format. Based on [libbpg](https://github.com/mirrorer/libbpg) | |
| 60 | -- [SDWebImageFLIFCoder](https://github.com/SDWebImage/SDWebImageFLIFCoder) - coder for FLIF format. Based on [libflif](https://github.com/FLIF-hub/FLIF) | |
| 61 | -- [SDWebImageAVIFCoder](https://github.com/SDWebImage/SDWebImageAVIFCoder) - coder for AVIF (AV1-based) format. Based on [libavif](https://github.com/AOMediaCodec/libavif) | |
| 62 | -- [SDWebImagePDFCoder](https://github.com/SDWebImage/SDWebImagePDFCoder) - coder for PDF vector format. Using built-in frameworks | |
| 63 | -- [SDWebImageSVGCoder](https://github.com/SDWebImage/SDWebImageSVGCoder) - coder for SVG vector format. Using built-in frameworks | |
| 64 | -- [SDWebImageLottieCoder](https://github.com/SDWebImage/SDWebImageLottieCoder) - coder for Lottie animation format. Based on [rlottie](https://github.com/Samsung/rlottie) | |
| 54 | +- [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder) - coder for WebP image format. Based on [libwebp](https://chromium.googlesource.com/webm/libwebp) | |
| 55 | +- [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder) - coder to support HEIF image without Apple's `Image/IO framework`, iOS 8+/macOS 10.10+ support. | |
| 56 | +- [SDWebImageBPGCoder](https://github.com/SDWebImage/SDWebImageBPGCoder) - coder for BPG format | |
| 57 | +- [SDWebImageFLIFCoder](https://github.com/SDWebImage/SDWebImageFLIFCoder) - coder for FLIF format | |
| 58 | +- [SDWebImageAVIFCoder](https://github.com/SDWebImage/SDWebImageAVIFCoder) - coder for AVIF (AV1-based) format | |
| 65 | 59 | - and more from community! |
| 66 | 60 | |
| 67 | -#### Custom Caches | |
| 68 | -- [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to support caching images with [YYCache](https://github.com/ibireme/YYCache) | |
| 69 | -- [SDWebImagePINPlugin](https://github.com/SDWebImage/SDWebImagePINPlugin) - plugin to support caching images with [PINCache](https://github.com/pinterest/PINCache) | |
| 70 | - | |
| 71 | -#### Custom Loaders | |
| 61 | +#### Loaders | |
| 72 | 62 | - [SDWebImagePhotosPlugin](https://github.com/SDWebImage/SDWebImagePhotosPlugin) - plugin to support loading images from Photos (using `Photos.framework`) |
| 73 | -- [SDWebImageLinkPlugin](https://github.com/SDWebImage/SDWebImageLinkPlugin) - plugin to support loading images from rich link url, as well as `LPLinkView` (using `LinkPresentation.framework`) | |
| 74 | 63 | |
| 75 | 64 | #### Integration with 3rd party libraries |
| 76 | -- [SDWebImageLottiePlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [Lottie-iOS](https://github.com/airbnb/lottie-ios), vector animation rending with remote JSON files | |
| 77 | -- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support | |
| 78 | 65 | - [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin) - plugin to support [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) as the engine for animated GIFs |
| 79 | 66 | - [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to integrate [YYImage](https://github.com/ibireme/YYImage) & [YYCache](https://github.com/ibireme/YYCache) for image rendering & caching |
| 80 | 67 | |
| 81 | -#### Community driven popular libraries | |
| 82 | -- [FirebaseUI](https://github.com/firebase/FirebaseUI-iOS) - Firebase Storage binding for query images, based on SDWebImage loader system | |
| 83 | -- [react-native-fast-image](https://github.com/DylanVann/react-native-fast-image) - React Native fast image component, based on SDWebImage Animated Image solution | |
| 84 | -- [flutter_image_compress](https://github.com/OpenFlutter/flutter_image_compress) - Flutter compresses image plugin, based on SDWebImage WebP coder plugin | |
| 85 | - | |
| 86 | 68 | #### Make our lives easier |
| 87 | 69 | - [libwebp-Xcode](https://github.com/SDWebImage/libwebp-Xcode) - A wrapper for [libwebp](https://chromium.googlesource.com/webm/libwebp) + an Xcode project. |
| 88 | 70 | - [libheif-Xcode](https://github.com/SDWebImage/libheif-Xcode) - A wrapper for [libheif](https://github.com/strukturag/libheif) + an Xcode project. |
| 89 | -- [libavif-Xcode](https://github.com/SDWebImage/libavif-Xcode) - A wrapper for [libavif](https://github.com/AOMediaCodec/libavif) + an Xcode project. | |
| 90 | -- and more third-party C/C++ image codec libraries with CocoaPods/Carthage/SwiftPM support. | |
| 71 | +- and more third-party C/C++ image codec libraries with CocoaPods/Carthage support. | |
| 91 | 72 | |
| 92 | -You can use those directly, or create similar components of your own, by using the customizable architecture of SDWebImage. | |
| 73 | +You can use those directly, or create similar components of your own. | |
| 93 | 74 | |
| 94 | 75 | ## Requirements |
| 95 | 76 | |
| ... | ... | @@ -127,13 +108,11 @@ You can use those directly, or create similar components of your own, by using t |
| 127 | 108 | - If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/sdwebimage). |
| 128 | 109 | - If you **found a bug**, open an issue. |
| 129 | 110 | - If you **have a feature request**, open an issue. |
| 130 | -- If you **need IRC channel**, use [Gitter](https://gitter.im/SDWebImage/community). | |
| 131 | 111 | |
| 132 | 112 | ## Contribution |
| 133 | 113 | |
| 134 | 114 | - If you **want to contribute**, read the [Contributing Guide](https://github.com/SDWebImage/SDWebImage/blob/master/.github/CONTRIBUTING.md) |
| 135 | 115 | - For **development contribution guide**, read the [How-To-Contribute](https://github.com/SDWebImage/SDWebImage/wiki/How-to-Contribute) |
| 136 | -- For **understanding code architecture**, read the [Code Architecture Analysis](https://github.com/SDWebImage/SDWebImage/wiki/5.6-Code-Architecture-Analysis) | |
| 137 | 116 | |
| 138 | 117 | ## How To Use |
| 139 | 118 | |
| ... | ... | @@ -159,30 +138,7 @@ imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg |
| 159 | 138 | ## Animated Images (GIF) support |
| 160 | 139 | |
| 161 | 140 | In 5.0, we introduced a brand new mechanism for supporting animated images. This includes animated image loading, rendering, decoding, and also supports customizations (for advanced users). |
| 162 | - | |
| 163 | -This animated image solution is available for `iOS`/`tvOS`/`macOS`. The `SDAnimatedImage` is subclass of `UIImage/NSImage`, and `SDAnimatedImageView` is subclass of `UIImageView/NSImageView`, to make them compatible with the common frameworks APIs. | |
| 164 | - | |
| 165 | -The `SDAnimatedImageView` supports the familiar image loading category methods, works like drop-in replacement for `UIImageView/NSImageView`. | |
| 166 | - | |
| 167 | -Don't have UIView (like WatchKit or CALayer)? you can still use `SDAnimatedPlayer` the player engine for advanced playback and rendering. | |
| 168 | - | |
| 169 | -See [Animated Image](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#animated-image-50) for more detailed information. | |
| 170 | - | |
| 171 | -* Objective-C | |
| 172 | - | |
| 173 | -```objective-c | |
| 174 | -SDAnimatedImageView *imageView = [SDAnimatedImageView new]; | |
| 175 | -SDAnimatedImage *animatedImage = [SDAnimatedImage imageNamed:@"image.gif"]; | |
| 176 | -imageView.image = animatedImage; | |
| 177 | -``` | |
| 178 | - | |
| 179 | -* Swift | |
| 180 | - | |
| 181 | -```swift | |
| 182 | -let imageView = SDAnimatedImageView() | |
| 183 | -let animatedImage = SDAnimatedImage(named: "image.gif") | |
| 184 | -imageView.image = animatedImage | |
| 185 | -``` | |
| 141 | +This animated image solution is available for `iOS`/`tvOS`/`macOS`. The `SDAnimatedImage` is subclass of `UIImage/NSImage`, and `SDAnimatedImageView` is subclass of `UIImageView/NSImageView`, to make them compatible with the common frameworks APIs. See [Animated Image](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#animated-image-50) for more detailed information. | |
| 186 | 142 | |
| 187 | 143 | #### FLAnimatedImage integration has its own dedicated repo |
| 188 | 144 | In order to clean up things and make our core project do less things, we decided that the `FLAnimatedImage` integration does not belong here. From 5.0, this will still be available, but under a dedicated repo [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin). |
| ... | ... | @@ -284,12 +240,6 @@ In the source files where you need to use the library, import the umbrella heade |
| 284 | 240 | #import <SDWebImage/SDWebImage.h> |
| 285 | 241 | ``` |
| 286 | 242 | |
| 287 | -It's also recommend to use the module import syntax, available for CocoaPods(enable `modular_headers`)/Carthage/SwiftPM. | |
| 288 | - | |
| 289 | -```objecitivec | |
| 290 | -@import SDWebImage; | |
| 291 | -``` | |
| 292 | - | |
| 293 | 243 | ### Build Project |
| 294 | 244 | |
| 295 | 245 | At this point your workspace should build without error. If you are having problem, post to the Issue and the |
| ... | ... | @@ -317,8 +267,6 @@ All source code is licensed under the [MIT License](https://github.com/SDWebImag |
| 317 | 267 | |
| 318 | 268 | ## Architecture |
| 319 | 269 | |
| 320 | -To learn about SDWebImage's architecture design for contribution, read [The Core of SDWebImage v5.6 Architecture](https://github.com/SDWebImage/SDWebImage/wiki/5.6-Code-Architecture-Analysis). Thanks @looseyi for the post and translation. | |
| 321 | - | |
| 322 | 270 | #### High Level Diagram |
| 323 | 271 | <p align="center" > |
| 324 | 272 | <img src="https://raw.githubusercontent.com/SDWebImage/SDWebImage/master/Docs/Diagrams/SDWebImageHighLevelDiagram.jpeg" title="SDWebImage high level diagram"> | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h
| ... | ... | @@ -23,8 +23,6 @@ static const SDImageFormat SDImageFormatTIFF = 3; |
| 23 | 23 | static const SDImageFormat SDImageFormatWebP = 4; |
| 24 | 24 | static const SDImageFormat SDImageFormatHEIC = 5; |
| 25 | 25 | static const SDImageFormat SDImageFormatHEIF = 6; |
| 26 | -static const SDImageFormat SDImageFormatPDF = 7; | |
| 27 | -static const SDImageFormat SDImageFormatSVG = 8; | |
| 28 | 26 | |
| 29 | 27 | /** |
| 30 | 28 | NSData category about the image content type and UTI. |
| ... | ... | @@ -45,16 +43,14 @@ static const SDImageFormat SDImageFormatSVG = 8; |
| 45 | 43 | * |
| 46 | 44 | * @param format Format as SDImageFormat |
| 47 | 45 | * @return The UTType as CFStringRef |
| 48 | - * @note For unknown format, `kUTTypeImage` abstract type will return | |
| 49 | 46 | */ |
| 50 | 47 | + (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format CF_RETURNS_NOT_RETAINED NS_SWIFT_NAME(sd_UTType(from:)); |
| 51 | 48 | |
| 52 | 49 | /** |
| 53 | - * Convert UTType to SDImageFormat | |
| 50 | + * Convert UTTyppe to SDImageFormat | |
| 54 | 51 | * |
| 55 | 52 | * @param uttype The UTType as CFStringRef |
| 56 | 53 | * @return The Format as SDImageFormat |
| 57 | - * @note For unknown type, `SDImageFormatUndefined` will return | |
| 58 | 54 | */ |
| 59 | 55 | + (SDImageFormat)sd_imageFormatFromUTType:(nonnull CFStringRef)uttype; |
| 60 | 56 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m
| ... | ... | @@ -17,7 +17,6 @@ |
| 17 | 17 | |
| 18 | 18 | // Currently Image/IO does not support WebP |
| 19 | 19 | #define kSDUTTypeWebP ((__bridge CFStringRef)@"public.webp") |
| 20 | -#define kSVGTagEnd @"</svg>" | |
| 21 | 20 | |
| 22 | 21 | @implementation NSData (ImageContentType) |
| 23 | 22 | |
| ... | ... | @@ -66,24 +65,6 @@ |
| 66 | 65 | } |
| 67 | 66 | break; |
| 68 | 67 | } |
| 69 | - case 0x25: { | |
| 70 | - if (data.length >= 4) { | |
| 71 | ||
| 72 | - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(1, 3)] encoding:NSASCIIStringEncoding]; | |
| 73 | - if ([testString isEqualToString:@"PDF"]) { | |
| 74 | - return SDImageFormatPDF; | |
| 75 | - } | |
| 76 | - } | |
| 77 | - } | |
| 78 | - case 0x3C: { | |
| 79 | - if (data.length > 100) { | |
| 80 | - // Check end with SVG tag | |
| 81 | - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(data.length - 100, 100)] encoding:NSASCIIStringEncoding]; | |
| 82 | - if ([testString containsString:kSVGTagEnd]) { | |
| 83 | - return SDImageFormatSVG; | |
| 84 | - } | |
| 85 | - } | |
| 86 | - } | |
| 87 | 68 | } |
| 88 | 69 | return SDImageFormatUndefined; |
| 89 | 70 | } |
| ... | ... | @@ -112,15 +93,9 @@ |
| 112 | 93 | case SDImageFormatHEIF: |
| 113 | 94 | UTType = kSDUTTypeHEIF; |
| 114 | 95 | break; |
| 115 | - case SDImageFormatPDF: | |
| 116 | - UTType = kUTTypePDF; | |
| 117 | - break; | |
| 118 | - case SDImageFormatSVG: | |
| 119 | - UTType = kUTTypeScalableVectorGraphics; | |
| 120 | - break; | |
| 121 | 96 | default: |
| 122 | - // default is kUTTypeImage abstract type | |
| 123 | - UTType = kUTTypeImage; | |
| 97 | + // default is kUTTypePNG | |
| 98 | + UTType = kUTTypePNG; | |
| 124 | 99 | break; |
| 125 | 100 | } |
| 126 | 101 | return UTType; |
| ... | ... | @@ -145,10 +120,6 @@ |
| 145 | 120 | imageFormat = SDImageFormatHEIC; |
| 146 | 121 | } else if (CFStringCompare(uttype, kSDUTTypeHEIF, 0) == kCFCompareEqualTo) { |
| 147 | 122 | imageFormat = SDImageFormatHEIF; |
| 148 | - } else if (CFStringCompare(uttype, kUTTypePDF, 0) == kCFCompareEqualTo) { | |
| 149 | - imageFormat = SDImageFormatPDF; | |
| 150 | - } else if (CFStringCompare(uttype, kUTTypeScalableVectorGraphics, 0) == kCFCompareEqualTo) { | |
| 151 | - imageFormat = SDImageFormatSVG; | |
| 152 | 123 | } else { |
| 153 | 124 | imageFormat = SDImageFormatUndefined; |
| 154 | 125 | } | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.h
| ... | ... | @@ -20,10 +20,6 @@ The underlying Core Graphics image object. This will actually use `CGImageForPro |
| 20 | 20 | */ |
| 21 | 21 | @property (nonatomic, readonly, nullable) CGImageRef CGImage; |
| 22 | 22 | /** |
| 23 | - The underlying Core Image data. This will actually use `bestRepresentationForRect` with the image size to find the `NSCIImageRep`. | |
| 24 | - */ | |
| 25 | -@property (nonatomic, readonly, nullable) CIImage *CIImage; | |
| 26 | -/** | |
| 27 | 23 | The scale factor of the image. This wil actually use `bestRepresentationForRect` with image size and pixel size to calculate the scale factor. If failed, use the default value 1.0. Should be greater than or equal to 1.0. |
| 28 | 24 | */ |
| 29 | 25 | @property (nonatomic, readonly) CGFloat scale; |
| ... | ... | @@ -43,16 +39,6 @@ The underlying Core Graphics image object. This will actually use `CGImageForPro |
| 43 | 39 | - (nonnull instancetype)initWithCGImage:(nonnull CGImageRef)cgImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation; |
| 44 | 40 | |
| 45 | 41 | /** |
| 46 | - Initializes and returns an image object with the specified Core Image object. The representation is `NSCIImageRep`. | |
| 47 | - | |
| 48 | - @param ciImage A Core Image image object | |
| 49 | - @param scale The image scale factor | |
| 50 | - @param orientation The orientation of the image data | |
| 51 | - @return The image object | |
| 52 | - */ | |
| 53 | -- (nonnull instancetype)initWithCIImage:(nonnull CIImage *)ciImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation; | |
| 54 | - | |
| 55 | -/** | |
| 56 | 42 | Returns an image object with the scale factor. The representation is created from the image data. |
| 57 | 43 | @note The difference between these this and `initWithData:` is that `initWithData:` will always use `backingScaleFactor` as scale factor. |
| 58 | 44 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m
| ... | ... | @@ -20,15 +20,6 @@ |
| 20 | 20 | return cgImage; |
| 21 | 21 | } |
| 22 | 22 | |
| 23 | -- (nullable CIImage *)CIImage { | |
| 24 | - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); | |
| 25 | - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; | |
| 26 | - if (![imageRep isKindOfClass:NSCIImageRep.class]) { | |
| 27 | - return nil; | |
| 28 | - } | |
| 29 | - return ((NSCIImageRep *)imageRep).CIImage; | |
| 30 | -} | |
| 31 | - | |
| 32 | 23 | - (CGFloat)scale { |
| 33 | 24 | CGFloat scale = 1; |
| 34 | 25 | NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); |
| ... | ... | @@ -74,28 +65,6 @@ |
| 74 | 65 | return self; |
| 75 | 66 | } |
| 76 | 67 | |
| 77 | -- (instancetype)initWithCIImage:(nonnull CIImage *)ciImage scale:(CGFloat)scale orientation:(CGImagePropertyOrientation)orientation { | |
| 78 | - NSCIImageRep *imageRep; | |
| 79 | - if (orientation != kCGImagePropertyOrientationUp) { | |
| 80 | - CIImage *rotatedCIImage = [ciImage imageByApplyingOrientation:orientation]; | |
| 81 | - imageRep = [[NSCIImageRep alloc] initWithCIImage:rotatedCIImage]; | |
| 82 | - } else { | |
| 83 | - imageRep = [[NSCIImageRep alloc] initWithCIImage:ciImage]; | |
| 84 | - } | |
| 85 | - if (scale < 1) { | |
| 86 | - scale = 1; | |
| 87 | - } | |
| 88 | - CGFloat pixelWidth = imageRep.pixelsWide; | |
| 89 | - CGFloat pixelHeight = imageRep.pixelsHigh; | |
| 90 | - NSSize size = NSMakeSize(pixelWidth / scale, pixelHeight / scale); | |
| 91 | - self = [self initWithSize:size]; | |
| 92 | - if (self) { | |
| 93 | - imageRep.size = size; | |
| 94 | - [self addRepresentation:imageRep]; | |
| 95 | - } | |
| 96 | - return self; | |
| 97 | -} | |
| 98 | - | |
| 99 | 68 | - (instancetype)initWithData:(nonnull NSData *)data scale:(CGFloat)scale { |
| 100 | 69 | NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithData:data]; |
| 101 | 70 | if (!imageRep) { | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h
| ... | ... | @@ -57,12 +57,6 @@ |
| 57 | 57 | */ |
| 58 | 58 | @property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded; |
| 59 | 59 | |
| 60 | -/** | |
| 61 | - Return the animated image coder if the image is created with `initWithAnimatedCoder:scale:` method. | |
| 62 | - @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding. | |
| 63 | - */ | |
| 64 | -@property (nonatomic, strong, readonly, nullable) id<SDAnimatedImageCoder> animatedCoder; | |
| 65 | - | |
| 66 | 60 | @end |
| 67 | 61 | |
| 68 | 62 | /** |
| ... | ... | @@ -72,7 +66,6 @@ |
| 72 | 66 | |
| 73 | 67 | // This class override these methods from UIImage(NSImage), and it supports NSSecureCoding. |
| 74 | 68 | // You should use these methods to create a new animated image. Use other methods just call super instead. |
| 75 | -// Pay attention, when the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. | |
| 76 | 69 | + (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support |
| 77 | 70 | #if __has_include(<UIKit/UITraitCollection.h>) |
| 78 | 71 | + (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection; // Cache in memory, no Asset Catalog support |
| ... | ... | @@ -101,11 +94,11 @@ |
| 101 | 94 | The scale factor of the image. |
| 102 | 95 | |
| 103 | 96 | @note For UIKit, this just call super instead. |
| 104 | - @note For AppKit, `NSImage` can contains multiple image representations with different scales. However, this class does not do that from the design. We process the scale like UIKit. This will actually be calculated from image size and pixel size. | |
| 97 | + @note For AppKit, `NSImage` can contains multiple image representations with different scales. However, this class does not do that from the design. We processs the scale like UIKit. This wil actually be calculated from image size and pixel size. | |
| 105 | 98 | */ |
| 106 | 99 | @property (nonatomic, readonly) CGFloat scale; |
| 107 | 100 | |
| 108 | -// By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the description in `SDAnimatedImage` protocol. | |
| 101 | +// By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the decsription in `SDAnimatedImage` protocol. | |
| 109 | 102 | // After preloaded, there is no huge difference on performance between this and UIImage's `animatedImageWithImages:duration:`. But UIImage's animation have some issues such like blanking and pausing during segue when using in `UIImageView`. It's recommend to use only if need. |
| 110 | 103 | - (void)preloadAllFrames; |
| 111 | 104 | - (void)unloadAllFrames; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m
| ... | ... | @@ -12,9 +12,6 @@ |
| 12 | 12 | #import "SDImageCodersManager.h" |
| 13 | 13 | #import "SDImageFrame.h" |
| 14 | 14 | #import "UIImage+MemoryCacheCost.h" |
| 15 | -#import "UIImage+Metadata.h" | |
| 16 | -#import "UIImage+MultiFormat.h" | |
| 17 | -#import "SDImageCoderHelper.h" | |
| 18 | 15 | #import "SDImageAssetManager.h" |
| 19 | 16 | #import "objc/runtime.h" |
| 20 | 17 | |
| ... | ... | @@ -35,7 +32,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 35 | 32 | |
| 36 | 33 | @interface SDAnimatedImage () |
| 37 | 34 | |
| 38 | -@property (nonatomic, strong) id<SDAnimatedImageCoder> animatedCoder; | |
| 35 | +@property (nonatomic, strong) id<SDAnimatedImageCoder> coder; | |
| 39 | 36 | @property (nonatomic, assign, readwrite) SDImageFormat animatedImageFormat; |
| 40 | 37 | @property (atomic, copy) NSArray<SDImageFrame *> *loadedAnimatedImageFrames; // Mark as atomic to keep thread-safe |
| 41 | 38 | @property (nonatomic, assign, getter=isAllFramesLoaded) BOOL allFramesLoaded; |
| ... | ... | @@ -159,10 +156,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 159 | 156 | self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:image.imageOrientation]; |
| 160 | 157 | #endif |
| 161 | 158 | if (self) { |
| 162 | - // Only keep the animated coder if frame count > 1, save RAM usage for non-animated image format (APNG/WebP) | |
| 163 | - if (animatedCoder.animatedImageFrameCount > 1) { | |
| 164 | - _animatedCoder = animatedCoder; | |
| 165 | - } | |
| 159 | + _coder = animatedCoder; | |
| 166 | 160 | NSData *data = [animatedCoder animatedImageData]; |
| 167 | 161 | SDImageFormat format = [NSData sd_imageFormatForImageData:data]; |
| 168 | 162 | _animatedImageFormat = format; |
| ... | ... | @@ -172,9 +166,6 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 172 | 166 | |
| 173 | 167 | #pragma mark - Preload |
| 174 | 168 | - (void)preloadAllFrames { |
| 175 | - if (!_animatedCoder) { | |
| 176 | - return; | |
| 177 | - } | |
| 178 | 169 | if (!self.isAllFramesLoaded) { |
| 179 | 170 | NSMutableArray<SDImageFrame *> *frames = [NSMutableArray arrayWithCapacity:self.animatedImageFrameCount]; |
| 180 | 171 | for (size_t i = 0; i < self.animatedImageFrameCount; i++) { |
| ... | ... | @@ -189,9 +180,6 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 189 | 180 | } |
| 190 | 181 | |
| 191 | 182 | - (void)unloadAllFrames { |
| 192 | - if (!_animatedCoder) { | |
| 193 | - return; | |
| 194 | - } | |
| 195 | 183 | if (self.isAllFramesLoaded) { |
| 196 | 184 | self.loadedAnimatedImageFrames = nil; |
| 197 | 185 | self.allFramesLoaded = NO; |
| ... | ... | @@ -202,12 +190,11 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 202 | 190 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { |
| 203 | 191 | self = [super initWithCoder:aDecoder]; |
| 204 | 192 | if (self) { |
| 205 | - _animatedImageFormat = [aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(animatedImageFormat))]; | |
| 206 | 193 | NSData *animatedImageData = [aDecoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(animatedImageData))]; |
| 194 | + CGFloat scale = self.scale; | |
| 207 | 195 | if (!animatedImageData) { |
| 208 | 196 | return self; |
| 209 | 197 | } |
| 210 | - CGFloat scale = self.scale; | |
| 211 | 198 | id<SDAnimatedImageCoder> animatedCoder = nil; |
| 212 | 199 | for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders) { |
| 213 | 200 | if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) { |
| ... | ... | @@ -220,16 +207,15 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 220 | 207 | if (!animatedCoder) { |
| 221 | 208 | return self; |
| 222 | 209 | } |
| 223 | - if (animatedCoder.animatedImageFrameCount > 1) { | |
| 224 | - _animatedCoder = animatedCoder; | |
| 225 | - } | |
| 210 | + _coder = animatedCoder; | |
| 211 | + SDImageFormat format = [NSData sd_imageFormatForImageData:animatedImageData]; | |
| 212 | + _animatedImageFormat = format; | |
| 226 | 213 | } |
| 227 | 214 | return self; |
| 228 | 215 | } |
| 229 | 216 | |
| 230 | 217 | - (void)encodeWithCoder:(NSCoder *)aCoder { |
| 231 | 218 | [super encodeWithCoder:aCoder]; |
| 232 | - [aCoder encodeInteger:self.animatedImageFormat forKey:NSStringFromSelector(@selector(animatedImageFormat))]; | |
| 233 | 219 | NSData *animatedImageData = self.animatedImageData; |
| 234 | 220 | if (animatedImageData) { |
| 235 | 221 | [aCoder encodeObject:animatedImageData forKey:NSStringFromSelector(@selector(animatedImageData))]; |
| ... | ... | @@ -240,18 +226,18 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 240 | 226 | return YES; |
| 241 | 227 | } |
| 242 | 228 | |
| 243 | -#pragma mark - SDAnimatedImageProvider | |
| 229 | +#pragma mark - SDAnimatedImage | |
| 244 | 230 | |
| 245 | 231 | - (NSData *)animatedImageData { |
| 246 | - return [self.animatedCoder animatedImageData]; | |
| 232 | + return [self.coder animatedImageData]; | |
| 247 | 233 | } |
| 248 | 234 | |
| 249 | 235 | - (NSUInteger)animatedImageLoopCount { |
| 250 | - return [self.animatedCoder animatedImageLoopCount]; | |
| 236 | + return [self.coder animatedImageLoopCount]; | |
| 251 | 237 | } |
| 252 | 238 | |
| 253 | 239 | - (NSUInteger)animatedImageFrameCount { |
| 254 | - return [self.animatedCoder animatedImageFrameCount]; | |
| 240 | + return [self.coder animatedImageFrameCount]; | |
| 255 | 241 | } |
| 256 | 242 | |
| 257 | 243 | - (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index { |
| ... | ... | @@ -262,7 +248,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 262 | 248 | SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index]; |
| 263 | 249 | return frame.image; |
| 264 | 250 | } |
| 265 | - return [self.animatedCoder animatedImageFrameAtIndex:index]; | |
| 251 | + return [self.coder animatedImageFrameAtIndex:index]; | |
| 266 | 252 | } |
| 267 | 253 | |
| 268 | 254 | - (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index { |
| ... | ... | @@ -273,7 +259,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 273 | 259 | SDImageFrame *frame = [self.loadedAnimatedImageFrames objectAtIndex:index]; |
| 274 | 260 | return frame.duration; |
| 275 | 261 | } |
| 276 | - return [self.animatedCoder animatedImageDurationAtIndex:index]; | |
| 262 | + return [self.coder animatedImageDurationAtIndex:index]; | |
| 277 | 263 | } |
| 278 | 264 | |
| 279 | 265 | @end |
| ... | ... | @@ -301,90 +287,3 @@ static CGFloat SDImageScaleFromPath(NSString *string) { |
| 301 | 287 | } |
| 302 | 288 | |
| 303 | 289 | @end |
| 304 | - | |
| 305 | -@implementation SDAnimatedImage (Metadata) | |
| 306 | - | |
| 307 | -- (BOOL)sd_isAnimated { | |
| 308 | - return YES; | |
| 309 | -} | |
| 310 | - | |
| 311 | -- (NSUInteger)sd_imageLoopCount { | |
| 312 | - return self.animatedImageLoopCount; | |
| 313 | -} | |
| 314 | - | |
| 315 | -- (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { | |
| 316 | - return; | |
| 317 | -} | |
| 318 | - | |
| 319 | -- (SDImageFormat)sd_imageFormat { | |
| 320 | - return self.animatedImageFormat; | |
| 321 | -} | |
| 322 | - | |
| 323 | -- (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat { | |
| 324 | - return; | |
| 325 | -} | |
| 326 | - | |
| 327 | -- (BOOL)sd_isVector { | |
| 328 | - return NO; | |
| 329 | -} | |
| 330 | - | |
| 331 | -@end | |
| 332 | - | |
| 333 | -@implementation SDAnimatedImage (MultiFormat) | |
| 334 | - | |
| 335 | -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data { | |
| 336 | - return [self sd_imageWithData:data scale:1]; | |
| 337 | -} | |
| 338 | - | |
| 339 | -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale { | |
| 340 | - return [self sd_imageWithData:data scale:scale firstFrameOnly:NO]; | |
| 341 | -} | |
| 342 | - | |
| 343 | -+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data scale:(CGFloat)scale firstFrameOnly:(BOOL)firstFrameOnly { | |
| 344 | - if (!data) { | |
| 345 | - return nil; | |
| 346 | - } | |
| 347 | - return [[self alloc] initWithData:data scale:scale options:@{SDImageCoderDecodeFirstFrameOnly : @(firstFrameOnly)}]; | |
| 348 | -} | |
| 349 | - | |
| 350 | -- (nullable NSData *)sd_imageData { | |
| 351 | - NSData *imageData = self.animatedImageData; | |
| 352 | - if (imageData) { | |
| 353 | - return imageData; | |
| 354 | - } else { | |
| 355 | - return [self sd_imageDataAsFormat:self.animatedImageFormat]; | |
| 356 | - } | |
| 357 | -} | |
| 358 | - | |
| 359 | -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat { | |
| 360 | - return [self sd_imageDataAsFormat:imageFormat compressionQuality:1]; | |
| 361 | -} | |
| 362 | - | |
| 363 | -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality { | |
| 364 | - return [self sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:NO]; | |
| 365 | -} | |
| 366 | - | |
| 367 | -- (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat compressionQuality:(double)compressionQuality firstFrameOnly:(BOOL)firstFrameOnly { | |
| 368 | - if (firstFrameOnly) { | |
| 369 | - // First frame, use super implementation | |
| 370 | - return [super sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly]; | |
| 371 | - } | |
| 372 | - NSUInteger frameCount = self.animatedImageFrameCount; | |
| 373 | - if (frameCount <= 1) { | |
| 374 | - // Static image, use super implementation | |
| 375 | - return [super sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly]; | |
| 376 | - } | |
| 377 | - // Keep animated image encoding, loop each frame. | |
| 378 | - NSMutableArray<SDImageFrame *> *frames = [NSMutableArray arrayWithCapacity:frameCount]; | |
| 379 | - for (size_t i = 0; i < frameCount; i++) { | |
| 380 | - UIImage *image = [self animatedImageFrameAtIndex:i]; | |
| 381 | - NSTimeInterval duration = [self animatedImageDurationAtIndex:i]; | |
| 382 | - SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; | |
| 383 | - [frames addObject:frame]; | |
| 384 | - } | |
| 385 | - UIImage *animatedImage = [SDImageCoderHelper animatedImageWithFrames:frames]; | |
| 386 | - NSData *imageData = [animatedImage sd_imageDataAsFormat:imageFormat compressionQuality:compressionQuality firstFrameOnly:firstFrameOnly]; | |
| 387 | - return imageData; | |
| 388 | -} | |
| 389 | - | |
| 390 | -@end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m
| ... | ... | @@ -27,13 +27,13 @@ |
| 27 | 27 | } |
| 28 | 28 | } |
| 29 | 29 | |
| 30 | -// `NSBitmapImageRep`'s `imageRepWithData:` is not designed initializer | |
| 30 | +// `NSBitmapImageRep`'s `imageRepWithData:` is not designed initlizer | |
| 31 | 31 | + (instancetype)imageRepWithData:(NSData *)data { |
| 32 | 32 | SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; |
| 33 | 33 | return imageRep; |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | -// We should override init method for `NSBitmapImageRep` to do initialize about animated image format | |
| 36 | +// We should override init method for `NSBitmapImageRep` to do initlize about animated image format | |
| 37 | 37 | - (instancetype)initWithData:(NSData *)data { |
| 38 | 38 | self = [super initWithData:data]; |
| 39 | 39 | if (self) { |
| ... | ... | @@ -58,14 +58,14 @@ |
| 58 | 58 | [self setProperty:NSImageLoopCount withValue:@(loopCount)]; |
| 59 | 59 | } else if (CFStringCompare(type, kUTTypePNG, 0) == kCFCompareEqualTo) { |
| 60 | 60 | // APNG |
| 61 | - // Do initialize about frame count, current frame/duration and loop count | |
| 61 | + // Do initilize about frame count, current frame/duration and loop count | |
| 62 | 62 | [self setProperty:NSImageFrameCount withValue:@(frameCount)]; |
| 63 | 63 | [self setProperty:NSImageCurrentFrame withValue:@(0)]; |
| 64 | 64 | NSUInteger loopCount = [SDImageAPNGCoder imageLoopCountWithSource:imageSource]; |
| 65 | 65 | [self setProperty:NSImageLoopCount withValue:@(loopCount)]; |
| 66 | 66 | } else if (CFStringCompare(type, kSDUTTypeHEICS, 0) == kCFCompareEqualTo) { |
| 67 | 67 | // HEIC |
| 68 | - // Do initialize about frame count, current frame/duration and loop count | |
| 68 | + // Do initilize about frame count, current frame/duration and loop count | |
| 69 | 69 | [self setProperty:NSImageFrameCount withValue:@(frameCount)]; |
| 70 | 70 | [self setProperty:NSImageCurrentFrame withValue:@(0)]; |
| 71 | 71 | NSUInteger loopCount = [SDImageHEICCoder imageLoopCountWithSource:imageSource]; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h
| ... | ... | @@ -21,7 +21,7 @@ |
| 21 | 21 | @interface SDAnimatedImageView : UIImageView |
| 22 | 22 | |
| 23 | 23 | /** |
| 24 | - Current display frame image. This value is KVO Compliance. | |
| 24 | + Current display frame image. | |
| 25 | 25 | */ |
| 26 | 26 | @property (nonatomic, strong, readonly, nullable) UIImage *currentFrame; |
| 27 | 27 | /** |
| ... | ... | @@ -44,15 +44,6 @@ |
| 44 | 44 | */ |
| 45 | 45 | @property (nonatomic, assign) NSInteger animationRepeatCount; |
| 46 | 46 | /** |
| 47 | - The animation playback rate. Default is 1.0. | |
| 48 | - `1.0` means the normal speed. | |
| 49 | - `0.0` means stopping the animation. | |
| 50 | - `0.0-1.0` means the slow speed. | |
| 51 | - `> 1.0` means the fast speed. | |
| 52 | - `< 0.0` is not supported currently and stop animation. (may support reverse playback in the future) | |
| 53 | - */ | |
| 54 | -@property (nonatomic, assign) double playbackRate; | |
| 55 | -/** | |
| 56 | 47 | Provide a max buffer size by bytes. This is used to adjust frame buffer count and can be useful when the decoding cost is expensive (such as Animated WebP software decoding). Default is 0. |
| 57 | 48 | `0` means automatically adjust by calculating current memory usage. |
| 58 | 49 | `1` means without any buffer cache, each of frames will be decoded and then be freed after rendering. (Lowest Memory and Highest CPU) |
| ... | ... | @@ -81,19 +72,13 @@ |
| 81 | 72 | */ |
| 82 | 73 | @property (nonatomic, assign) BOOL resetFrameIndexWhenStopped; |
| 83 | 74 | |
| 84 | -/** | |
| 85 | - If the image has more than one frame, set this value to `YES` will automatically | |
| 86 | - play/stop the animation when the view become visible/invisible. | |
| 87 | - Default is YES. | |
| 88 | - */ | |
| 89 | -@property (nonatomic, assign) BOOL autoPlayAnimatedImage; | |
| 90 | - | |
| 75 | +#if SD_UIKIT | |
| 91 | 76 | /** |
| 92 | 77 | You can specify a runloop mode to let it rendering. |
| 93 | - Default is NSRunLoopCommonModes on multi-core device, NSDefaultRunLoopMode on single-core device | |
| 94 | - @note This is useful for some cases, for example, always specify NSDefaultRunLoopMode, if you want to pause the animation when user scroll (for Mac user, drag the mouse or touchpad) | |
| 78 | + Default is NSRunLoopCommonModes on multi-core iOS device, NSDefaultRunLoopMode on single-core iOS device | |
| 95 | 79 | */ |
| 96 | 80 | @property (nonatomic, copy, nonnull) NSRunLoopMode runLoopMode; |
| 81 | +#endif | |
| 97 | 82 | @end |
| 98 | 83 | |
| 99 | 84 | #endif | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m
| ... | ... | @@ -10,28 +10,61 @@ |
| 10 | 10 | |
| 11 | 11 | #if SD_UIKIT || SD_MAC |
| 12 | 12 | |
| 13 | -#import "SDAnimatedImagePlayer.h" | |
| 14 | 13 | #import "UIImage+Metadata.h" |
| 15 | 14 | #import "NSImage+Compatibility.h" |
| 15 | +#import "SDWeakProxy.h" | |
| 16 | 16 | #import "SDInternalMacros.h" |
| 17 | -#import "objc/runtime.h" | |
| 17 | +#import <mach/mach.h> | |
| 18 | +#import <objc/runtime.h> | |
| 18 | 19 | |
| 19 | -@interface UIImageView () <CALayerDelegate> | |
| 20 | -@end | |
| 20 | +#if SD_MAC | |
| 21 | +#import <CoreVideo/CoreVideo.h> | |
| 22 | +static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext); | |
| 23 | +#endif | |
| 21 | 24 | |
| 22 | -@interface SDAnimatedImageView () { | |
| 23 | - BOOL _initFinished; // Extra flag to mark the `commonInit` is called | |
| 25 | +static NSUInteger SDDeviceTotalMemory() { | |
| 26 | + return (NSUInteger)[[NSProcessInfo processInfo] physicalMemory]; | |
| 27 | +} | |
| 28 | + | |
| 29 | +static NSUInteger SDDeviceFreeMemory() { | |
| 30 | + mach_port_t host_port = mach_host_self(); | |
| 31 | + mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); | |
| 32 | + vm_size_t page_size; | |
| 33 | + vm_statistics_data_t vm_stat; | |
| 34 | + kern_return_t kern; | |
| 35 | + | |
| 36 | + kern = host_page_size(host_port, &page_size); | |
| 37 | + if (kern != KERN_SUCCESS) return 0; | |
| 38 | + kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); | |
| 39 | + if (kern != KERN_SUCCESS) return 0; | |
| 40 | + return vm_stat.free_count * page_size; | |
| 41 | +} | |
| 42 | + | |
| 43 | +@interface SDAnimatedImageView () <CALayerDelegate> { | |
| 24 | 44 | NSRunLoopMode _runLoopMode; |
| 25 | - NSUInteger _maxBufferSize; | |
| 26 | - double _playbackRate; | |
| 45 | + BOOL _initFinished; // Extra flag to mark the `commonInit` is called | |
| 27 | 46 | } |
| 28 | 47 | |
| 29 | 48 | @property (nonatomic, strong, readwrite) UIImage *currentFrame; |
| 30 | 49 | @property (nonatomic, assign, readwrite) NSUInteger currentFrameIndex; |
| 31 | 50 | @property (nonatomic, assign, readwrite) NSUInteger currentLoopCount; |
| 51 | +@property (nonatomic, assign) NSUInteger totalFrameCount; | |
| 52 | +@property (nonatomic, assign) NSUInteger totalLoopCount; | |
| 53 | +@property (nonatomic, strong) UIImage<SDAnimatedImage> *animatedImage; | |
| 54 | +@property (nonatomic, strong) NSMutableDictionary<NSNumber *, UIImage *> *frameBuffer; | |
| 55 | +@property (nonatomic, assign) NSTimeInterval currentTime; | |
| 56 | +@property (nonatomic, assign) BOOL bufferMiss; | |
| 32 | 57 | @property (nonatomic, assign) BOOL shouldAnimate; |
| 33 | 58 | @property (nonatomic, assign) BOOL isProgressive; |
| 34 | -@property (nonatomic,strong) SDAnimatedImagePlayer *player; // The animation player. | |
| 59 | +@property (nonatomic, assign) NSUInteger maxBufferCount; | |
| 60 | +@property (nonatomic, strong) NSOperationQueue *fetchQueue; | |
| 61 | +@property (nonatomic, strong) dispatch_semaphore_t lock; | |
| 62 | +@property (nonatomic, assign) CGFloat animatedImageScale; | |
| 63 | +#if SD_MAC | |
| 64 | +@property (nonatomic, assign) CVDisplayLinkRef displayLink; | |
| 65 | +#else | |
| 66 | +@property (nonatomic, strong) CADisplayLink *displayLink; | |
| 67 | +#endif | |
| 35 | 68 | @property (nonatomic) CALayer *imageViewLayer; // The actual rendering layer. |
| 36 | 69 | |
| 37 | 70 | @end |
| ... | ... | @@ -96,17 +129,63 @@ |
| 96 | 129 | { |
| 97 | 130 | // Pay attention that UIKit's `initWithImage:` will trigger a `setImage:` during initialization before this `commonInit`. |
| 98 | 131 | // So the properties which rely on this order, should using lazy-evaluation or do extra check in `setImage:`. |
| 99 | - self.autoPlayAnimatedImage = YES; | |
| 100 | 132 | self.shouldCustomLoopCount = NO; |
| 101 | 133 | self.shouldIncrementalLoad = YES; |
| 102 | - self.playbackRate = 1.0; | |
| 103 | 134 | #if SD_MAC |
| 104 | 135 | self.wantsLayer = YES; |
| 105 | 136 | #endif |
| 137 | +#if SD_UIKIT | |
| 138 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; | |
| 139 | +#endif | |
| 106 | 140 | // Mark commonInit finished |
| 107 | 141 | _initFinished = YES; |
| 108 | 142 | } |
| 109 | 143 | |
| 144 | +- (void)resetAnimatedImage | |
| 145 | +{ | |
| 146 | + self.animatedImage = nil; | |
| 147 | + self.totalFrameCount = 0; | |
| 148 | + self.totalLoopCount = 0; | |
| 149 | + // reset current state | |
| 150 | + [self resetCurrentFrameIndex]; | |
| 151 | + self.shouldAnimate = NO; | |
| 152 | + self.isProgressive = NO; | |
| 153 | + self.maxBufferCount = 0; | |
| 154 | + self.animatedImageScale = 1; | |
| 155 | + [_fetchQueue cancelAllOperations]; | |
| 156 | + // clear buffer cache | |
| 157 | + [self clearFrameBuffer]; | |
| 158 | +} | |
| 159 | + | |
| 160 | +- (void)resetProgressiveImage | |
| 161 | +{ | |
| 162 | + self.animatedImage = nil; | |
| 163 | + self.totalFrameCount = 0; | |
| 164 | + self.totalLoopCount = 0; | |
| 165 | + // preserve current state | |
| 166 | + self.shouldAnimate = NO; | |
| 167 | + self.isProgressive = YES; | |
| 168 | + self.maxBufferCount = 0; | |
| 169 | + self.animatedImageScale = 1; | |
| 170 | + // preserve buffer cache | |
| 171 | +} | |
| 172 | + | |
| 173 | +- (void)resetCurrentFrameIndex | |
| 174 | +{ | |
| 175 | + self.currentFrame = nil; | |
| 176 | + self.currentFrameIndex = 0; | |
| 177 | + self.currentLoopCount = 0; | |
| 178 | + self.currentTime = 0; | |
| 179 | + self.bufferMiss = NO; | |
| 180 | +} | |
| 181 | + | |
| 182 | +- (void)clearFrameBuffer | |
| 183 | +{ | |
| 184 | + SD_LOCK(self.lock); | |
| 185 | + [_frameBuffer removeAllObjects]; | |
| 186 | + SD_UNLOCK(self.lock); | |
| 187 | +} | |
| 188 | + | |
| 110 | 189 | #pragma mark - Accessors |
| 111 | 190 | #pragma mark Public |
| 112 | 191 | |
| ... | ... | @@ -119,87 +198,71 @@ |
| 119 | 198 | // Check Progressive rendering |
| 120 | 199 | [self updateIsProgressiveWithImage:image]; |
| 121 | 200 | |
| 122 | - if (!self.isProgressive) { | |
| 201 | + if (self.isProgressive) { | |
| 202 | + // Reset all value, but keep current state | |
| 203 | + [self resetProgressiveImage]; | |
| 204 | + } else { | |
| 123 | 205 | // Stop animating |
| 124 | - self.player = nil; | |
| 125 | - self.currentFrame = nil; | |
| 126 | - self.currentFrameIndex = 0; | |
| 127 | - self.currentLoopCount = 0; | |
| 206 | + [self stopAnimating]; | |
| 207 | + // Reset all value | |
| 208 | + [self resetAnimatedImage]; | |
| 128 | 209 | } |
| 129 | 210 | |
| 130 | 211 | // We need call super method to keep function. This will impliedly call `setNeedsDisplay`. But we have no way to avoid this when using animated image. So we call `setNeedsDisplay` again at the end. |
| 131 | 212 | super.image = image; |
| 132 | 213 | if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)]) { |
| 133 | - if (!self.player) { | |
| 134 | - id<SDAnimatedImageProvider> provider; | |
| 135 | - // Check progressive loading | |
| 136 | - if (self.isProgressive) { | |
| 137 | - provider = [self progressiveAnimatedCoderForImage:image]; | |
| 138 | - } else { | |
| 139 | - provider = (id<SDAnimatedImage>)image; | |
| 140 | - } | |
| 141 | - // Create animated player | |
| 142 | - self.player = [SDAnimatedImagePlayer playerWithProvider:provider]; | |
| 143 | - } else { | |
| 144 | - // Update Frame Count | |
| 145 | - self.player.totalFrameCount = [(id<SDAnimatedImage>)image animatedImageFrameCount]; | |
| 214 | + NSUInteger animatedImageFrameCount = ((UIImage<SDAnimatedImage> *)image).animatedImageFrameCount; | |
| 215 | + // Check the frame count | |
| 216 | + if (animatedImageFrameCount <= 1) { | |
| 217 | + return; | |
| 146 | 218 | } |
| 147 | - | |
| 148 | - if (!self.player) { | |
| 149 | - // animated player nil means the image format is not supported, or frame count <= 1 | |
| 219 | + // If progressive rendering is disabled but animated image is incremental. Only show poster image | |
| 220 | + if (!self.isProgressive && image.sd_isIncremental) { | |
| 150 | 221 | return; |
| 151 | 222 | } |
| 152 | - | |
| 153 | - // Custom Loop Count | |
| 154 | - if (self.shouldCustomLoopCount) { | |
| 155 | - self.player.totalLoopCount = self.animationRepeatCount; | |
| 223 | + self.animatedImage = (UIImage<SDAnimatedImage> *)image; | |
| 224 | + self.totalFrameCount = animatedImageFrameCount; | |
| 225 | + // Get the current frame and loop count. | |
| 226 | + self.totalLoopCount = self.animatedImage.animatedImageLoopCount; | |
| 227 | + // Get the scale | |
| 228 | + self.animatedImageScale = image.scale; | |
| 229 | + if (!self.isProgressive) { | |
| 230 | + self.currentFrame = image; | |
| 231 | + SD_LOCK(self.lock); | |
| 232 | + self.frameBuffer[@(self.currentFrameIndex)] = self.currentFrame; | |
| 233 | + SD_UNLOCK(self.lock); | |
| 156 | 234 | } |
| 157 | 235 | |
| 158 | - // RunLoop Mode | |
| 159 | - self.player.runLoopMode = self.runLoopMode; | |
| 160 | - | |
| 161 | - // Max Buffer Size | |
| 162 | - self.player.maxBufferSize = self.maxBufferSize; | |
| 163 | - | |
| 164 | - // Play Rate | |
| 165 | - self.player.playbackRate = self.playbackRate; | |
| 166 | - | |
| 167 | - // Setup handler | |
| 168 | - @weakify(self); | |
| 169 | - self.player.animationFrameHandler = ^(NSUInteger index, UIImage * frame) { | |
| 170 | - @strongify(self); | |
| 171 | - self.currentFrameIndex = index; | |
| 172 | - self.currentFrame = frame; | |
| 173 | - [self.imageViewLayer setNeedsDisplay]; | |
| 174 | - }; | |
| 175 | - self.player.animationLoopHandler = ^(NSUInteger loopCount) { | |
| 176 | - @strongify(self); | |
| 177 | - // Progressive image reach the current last frame index. Keep the state and pause animating. Wait for later restart | |
| 178 | - if (self.isProgressive) { | |
| 179 | - NSUInteger lastFrameIndex = self.player.totalFrameCount - 1; | |
| 180 | - [self.player seekToFrameAtIndex:lastFrameIndex loopCount:0]; | |
| 181 | - [self.player pausePlaying]; | |
| 182 | - } else { | |
| 183 | - self.currentLoopCount = loopCount; | |
| 184 | - } | |
| 185 | - }; | |
| 186 | - | |
| 187 | 236 | // Ensure disabled highlighting; it's not supported (see `-setHighlighted:`). |
| 188 | 237 | super.highlighted = NO; |
| 189 | 238 | |
| 190 | - [self stopAnimating]; | |
| 191 | - [self checkPlay]; | |
| 239 | + // Calculate max buffer size | |
| 240 | + [self calculateMaxBufferCount]; | |
| 241 | + // Update should animate | |
| 242 | + [self updateShouldAnimate]; | |
| 243 | + if (self.shouldAnimate) { | |
| 244 | + [self startAnimating]; | |
| 245 | + } | |
| 192 | 246 | |
| 193 | 247 | [self.imageViewLayer setNeedsDisplay]; |
| 194 | 248 | } |
| 195 | 249 | } |
| 196 | 250 | |
| 197 | -#pragma mark - Configuration | |
| 198 | - | |
| 251 | +#if SD_UIKIT | |
| 199 | 252 | - (void)setRunLoopMode:(NSRunLoopMode)runLoopMode |
| 200 | 253 | { |
| 254 | + if ([_runLoopMode isEqual:runLoopMode]) { | |
| 255 | + return; | |
| 256 | + } | |
| 257 | + if (_displayLink) { | |
| 258 | + if (_runLoopMode) { | |
| 259 | + [_displayLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:_runLoopMode]; | |
| 260 | + } | |
| 261 | + if (runLoopMode.length > 0) { | |
| 262 | + [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:runLoopMode]; | |
| 263 | + } | |
| 264 | + } | |
| 201 | 265 | _runLoopMode = [runLoopMode copy]; |
| 202 | - self.player.runLoopMode = runLoopMode; | |
| 203 | 266 | } |
| 204 | 267 | |
| 205 | 268 | - (NSRunLoopMode)runLoopMode |
| ... | ... | @@ -209,42 +272,99 @@ |
| 209 | 272 | } |
| 210 | 273 | return _runLoopMode; |
| 211 | 274 | } |
| 275 | +#endif | |
| 212 | 276 | |
| 213 | -+ (NSString *)defaultRunLoopMode { | |
| 214 | - // Key off `activeProcessorCount` (as opposed to `processorCount`) since the system could shut down cores in certain situations. | |
| 215 | - return [NSProcessInfo processInfo].activeProcessorCount > 1 ? NSRunLoopCommonModes : NSDefaultRunLoopMode; | |
| 277 | +- (BOOL)shouldIncrementalLoad { | |
| 278 | + if (!_initFinished) { | |
| 279 | + return YES; // Defaults to YES | |
| 280 | + } | |
| 281 | + return _initFinished; | |
| 216 | 282 | } |
| 217 | 283 | |
| 218 | -- (void)setMaxBufferSize:(NSUInteger)maxBufferSize | |
| 284 | +#pragma mark - Private | |
| 285 | +- (NSOperationQueue *)fetchQueue | |
| 219 | 286 | { |
| 220 | - _maxBufferSize = maxBufferSize; | |
| 221 | - self.player.maxBufferSize = maxBufferSize; | |
| 287 | + if (!_fetchQueue) { | |
| 288 | + _fetchQueue = [[NSOperationQueue alloc] init]; | |
| 289 | + _fetchQueue.maxConcurrentOperationCount = 1; | |
| 290 | + } | |
| 291 | + return _fetchQueue; | |
| 222 | 292 | } |
| 223 | 293 | |
| 224 | -- (NSUInteger)maxBufferSize { | |
| 225 | - return _maxBufferSize; // Defaults to 0 | |
| 294 | +- (NSMutableDictionary<NSNumber *,UIImage *> *)frameBuffer | |
| 295 | +{ | |
| 296 | + if (!_frameBuffer) { | |
| 297 | + _frameBuffer = [NSMutableDictionary dictionary]; | |
| 298 | + } | |
| 299 | + return _frameBuffer; | |
| 226 | 300 | } |
| 227 | 301 | |
| 228 | -- (void)setPlaybackRate:(double)playbackRate | |
| 229 | -{ | |
| 230 | - _playbackRate = playbackRate; | |
| 231 | - self.player.playbackRate = playbackRate; | |
| 302 | +- (dispatch_semaphore_t)lock { | |
| 303 | + if (!_lock) { | |
| 304 | + _lock = dispatch_semaphore_create(1); | |
| 305 | + } | |
| 306 | + return _lock; | |
| 232 | 307 | } |
| 233 | 308 | |
| 234 | -- (double)playbackRate | |
| 309 | +#if SD_MAC | |
| 310 | +- (CVDisplayLinkRef)displayLink | |
| 235 | 311 | { |
| 236 | - if (!_initFinished) { | |
| 237 | - return 1.0; // Defaults to 1.0 | |
| 312 | + if (!_displayLink) { | |
| 313 | + CVReturn error = CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink); | |
| 314 | + if (error) { | |
| 315 | + return NULL; | |
| 316 | + } | |
| 317 | + CVDisplayLinkSetOutputCallback(_displayLink, DisplayLinkCallback, (__bridge void *)self); | |
| 238 | 318 | } |
| 239 | - return _playbackRate; | |
| 319 | + return _displayLink; | |
| 240 | 320 | } |
| 321 | +#else | |
| 322 | +- (CADisplayLink *)displayLink | |
| 323 | +{ | |
| 324 | + if (!_displayLink) { | |
| 325 | + // It is important to note the use of a weak proxy here to avoid a retain cycle. `-displayLinkWithTarget:selector:` | |
| 326 | + // will retain its target until it is invalidated. We use a weak proxy so that the image view will get deallocated | |
| 327 | + // independent of the display link's lifetime. Upon image view deallocation, we invalidate the display | |
| 328 | + // link which will lead to the deallocation of both the display link and the weak proxy. | |
| 329 | + SDWeakProxy *weakProxy = [SDWeakProxy proxyWithTarget:self]; | |
| 330 | + _displayLink = [CADisplayLink displayLinkWithTarget:weakProxy selector:@selector(displayDidRefresh:)]; | |
| 331 | + [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:self.runLoopMode]; | |
| 332 | + } | |
| 333 | + return _displayLink; | |
| 334 | +} | |
| 335 | +#endif | |
| 336 | + | |
| 337 | +#pragma mark - Life Cycle | |
| 241 | 338 | |
| 242 | -- (BOOL)shouldIncrementalLoad | |
| 339 | +- (void)dealloc | |
| 243 | 340 | { |
| 244 | - if (!_initFinished) { | |
| 245 | - return YES; // Defaults to YES | |
| 341 | + // Removes the display link from all run loop modes. | |
| 342 | +#if SD_MAC | |
| 343 | + if (_displayLink) { | |
| 344 | + CVDisplayLinkRelease(_displayLink); | |
| 345 | + _displayLink = NULL; | |
| 246 | 346 | } |
| 247 | - return _initFinished; | |
| 347 | +#else | |
| 348 | + [_displayLink invalidate]; | |
| 349 | + _displayLink = nil; | |
| 350 | + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; | |
| 351 | +#endif | |
| 352 | +} | |
| 353 | + | |
| 354 | +- (void)didReceiveMemoryWarning:(NSNotification *)notification { | |
| 355 | + [_fetchQueue cancelAllOperations]; | |
| 356 | + [_fetchQueue addOperationWithBlock:^{ | |
| 357 | + NSNumber *currentFrameIndex = @(self.currentFrameIndex); | |
| 358 | + SD_LOCK(self.lock); | |
| 359 | + NSArray *keys = self.frameBuffer.allKeys; | |
| 360 | + // only keep the next frame for later rendering | |
| 361 | + for (NSNumber * key in keys) { | |
| 362 | + if (![key isEqualToNumber:currentFrameIndex]) { | |
| 363 | + [self.frameBuffer removeObjectForKey:key]; | |
| 364 | + } | |
| 365 | + } | |
| 366 | + SD_UNLOCK(self.lock); | |
| 367 | + }]; | |
| 248 | 368 | } |
| 249 | 369 | |
| 250 | 370 | #pragma mark - UIView Method Overrides |
| ... | ... | @@ -262,7 +382,12 @@ |
| 262 | 382 | [super didMoveToSuperview]; |
| 263 | 383 | #endif |
| 264 | 384 | |
| 265 | - [self checkPlay]; | |
| 385 | + [self updateShouldAnimate]; | |
| 386 | + if (self.shouldAnimate) { | |
| 387 | + [self startAnimating]; | |
| 388 | + } else { | |
| 389 | + [self stopAnimating]; | |
| 390 | + } | |
| 266 | 391 | } |
| 267 | 392 | |
| 268 | 393 | #if SD_MAC |
| ... | ... | @@ -277,7 +402,12 @@ |
| 277 | 402 | [super didMoveToWindow]; |
| 278 | 403 | #endif |
| 279 | 404 | |
| 280 | - [self checkPlay]; | |
| 405 | + [self updateShouldAnimate]; | |
| 406 | + if (self.shouldAnimate) { | |
| 407 | + [self startAnimating]; | |
| 408 | + } else { | |
| 409 | + [self stopAnimating]; | |
| 410 | + } | |
| 281 | 411 | } |
| 282 | 412 | |
| 283 | 413 | #if SD_MAC |
| ... | ... | @@ -292,91 +422,88 @@ |
| 292 | 422 | [super setAlpha:alpha]; |
| 293 | 423 | #endif |
| 294 | 424 | |
| 295 | - [self checkPlay]; | |
| 425 | + [self updateShouldAnimate]; | |
| 426 | + if (self.shouldAnimate) { | |
| 427 | + [self startAnimating]; | |
| 428 | + } else { | |
| 429 | + [self stopAnimating]; | |
| 430 | + } | |
| 296 | 431 | } |
| 297 | 432 | |
| 298 | 433 | - (void)setHidden:(BOOL)hidden |
| 299 | 434 | { |
| 300 | 435 | [super setHidden:hidden]; |
| 301 | 436 | |
| 302 | - [self checkPlay]; | |
| 437 | + [self updateShouldAnimate]; | |
| 438 | + if (self.shouldAnimate) { | |
| 439 | + [self startAnimating]; | |
| 440 | + } else { | |
| 441 | + [self stopAnimating]; | |
| 442 | + } | |
| 303 | 443 | } |
| 304 | 444 | |
| 305 | 445 | #pragma mark - UIImageView Method Overrides |
| 306 | 446 | #pragma mark Image Data |
| 307 | 447 | |
| 308 | -- (void)setAnimationRepeatCount:(NSInteger)animationRepeatCount | |
| 448 | +- (void)startAnimating | |
| 309 | 449 | { |
| 310 | -#if SD_UIKIT | |
| 311 | - [super setAnimationRepeatCount:animationRepeatCount]; | |
| 450 | + if (self.animatedImage) { | |
| 451 | +#if SD_MAC | |
| 452 | + CVDisplayLinkStart(self.displayLink); | |
| 312 | 453 | #else |
| 313 | - _animationRepeatCount = animationRepeatCount; | |
| 454 | + self.displayLink.paused = NO; | |
| 314 | 455 | #endif |
| 315 | - | |
| 316 | - if (self.shouldCustomLoopCount) { | |
| 317 | - self.player.totalLoopCount = animationRepeatCount; | |
| 318 | - } | |
| 319 | -} | |
| 320 | - | |
| 321 | -- (void)startAnimating | |
| 322 | -{ | |
| 323 | - if (self.player) { | |
| 324 | - [self updateShouldAnimate]; | |
| 325 | - if (self.shouldAnimate) { | |
| 326 | - [self.player startPlaying]; | |
| 327 | - } | |
| 328 | 456 | } else { |
| 329 | 457 | #if SD_UIKIT |
| 330 | 458 | [super startAnimating]; |
| 331 | -#else | |
| 332 | - [super setAnimates:YES]; | |
| 333 | 459 | #endif |
| 334 | 460 | } |
| 335 | 461 | } |
| 336 | 462 | |
| 337 | 463 | - (void)stopAnimating |
| 338 | 464 | { |
| 339 | - if (self.player) { | |
| 465 | + if (self.animatedImage) { | |
| 466 | + [_fetchQueue cancelAllOperations]; | |
| 467 | + // Using `_displayLink` here because when UIImageView dealloc, it may trigger `[self stopAnimating]`, we already release the display link in SDAnimatedImageView's dealloc method. | |
| 468 | +#if SD_MAC | |
| 469 | + CVDisplayLinkStop(_displayLink); | |
| 470 | +#else | |
| 471 | + _displayLink.paused = YES; | |
| 472 | +#endif | |
| 340 | 473 | if (self.resetFrameIndexWhenStopped) { |
| 341 | - [self.player stopPlaying]; | |
| 342 | - } else { | |
| 343 | - [self.player pausePlaying]; | |
| 474 | + [self resetCurrentFrameIndex]; | |
| 344 | 475 | } |
| 345 | 476 | if (self.clearBufferWhenStopped) { |
| 346 | - [self.player clearFrameBuffer]; | |
| 477 | + [self clearFrameBuffer]; | |
| 347 | 478 | } |
| 348 | 479 | } else { |
| 349 | 480 | #if SD_UIKIT |
| 350 | 481 | [super stopAnimating]; |
| 351 | -#else | |
| 352 | - [super setAnimates:NO]; | |
| 353 | 482 | #endif |
| 354 | 483 | } |
| 355 | 484 | } |
| 356 | 485 | |
| 357 | -#if SD_UIKIT | |
| 358 | 486 | - (BOOL)isAnimating |
| 359 | 487 | { |
| 360 | - if (self.player) { | |
| 361 | - return self.player.isPlaying; | |
| 362 | - } else { | |
| 363 | - return [super isAnimating]; | |
| 364 | - } | |
| 365 | -} | |
| 366 | -#endif | |
| 367 | - | |
| 488 | + BOOL isAnimating = NO; | |
| 489 | + if (self.animatedImage) { | |
| 368 | 490 | #if SD_MAC |
| 369 | -- (BOOL)animates | |
| 370 | -{ | |
| 371 | - if (self.player) { | |
| 372 | - return self.player.isPlaying; | |
| 491 | + isAnimating = CVDisplayLinkIsRunning(self.displayLink); | |
| 492 | +#else | |
| 493 | + isAnimating = !self.displayLink.isPaused; | |
| 494 | +#endif | |
| 373 | 495 | } else { |
| 374 | - return [super animates]; | |
| 496 | +#if SD_UIKIT | |
| 497 | + isAnimating = [super isAnimating]; | |
| 498 | +#endif | |
| 375 | 499 | } |
| 500 | + return isAnimating; | |
| 376 | 501 | } |
| 377 | 502 | |
| 503 | +#if SD_MAC | |
| 378 | 504 | - (void)setAnimates:(BOOL)animates |
| 379 | 505 | { |
| 506 | + [super setAnimates:animates]; | |
| 380 | 507 | if (animates) { |
| 381 | 508 | [self startAnimating]; |
| 382 | 509 | } else { |
| ... | ... | @@ -390,7 +517,7 @@ |
| 390 | 517 | - (void)setHighlighted:(BOOL)highlighted |
| 391 | 518 | { |
| 392 | 519 | // Highlighted image is unsupported for animated images, but implementing it breaks the image view when embedded in a UICollectionViewCell. |
| 393 | - if (!self.player) { | |
| 520 | + if (!self.animatedImage) { | |
| 394 | 521 | [super setHighlighted:highlighted]; |
| 395 | 522 | } |
| 396 | 523 | } |
| ... | ... | @@ -399,19 +526,6 @@ |
| 399 | 526 | #pragma mark - Private Methods |
| 400 | 527 | #pragma mark Animation |
| 401 | 528 | |
| 402 | -/// Check if it should be played | |
| 403 | -- (void)checkPlay | |
| 404 | -{ | |
| 405 | - if (self.autoPlayAnimatedImage) { | |
| 406 | - [self updateShouldAnimate]; | |
| 407 | - if (self.shouldAnimate) { | |
| 408 | - [self startAnimating]; | |
| 409 | - } else { | |
| 410 | - [self stopAnimating]; | |
| 411 | - } | |
| 412 | - } | |
| 413 | -} | |
| 414 | - | |
| 415 | 529 | // Don't repeatedly check our window & superview in `-displayDidRefresh:` for performance reasons. |
| 416 | 530 | // Just update our cached value whenever the animated image or visibility (window, superview, hidden, alpha) is changed. |
| 417 | 531 | - (void)updateShouldAnimate |
| ... | ... | @@ -421,7 +535,7 @@ |
| 421 | 535 | #else |
| 422 | 536 | BOOL isVisible = self.window && self.superview && ![self isHidden] && self.alpha > 0.0; |
| 423 | 537 | #endif |
| 424 | - self.shouldAnimate = self.player && isVisible; | |
| 538 | + self.shouldAnimate = self.animatedImage && self.totalFrameCount > 1 && isVisible; | |
| 425 | 539 | } |
| 426 | 540 | |
| 427 | 541 | // Update progressive status only after `setImage:` call. |
| ... | ... | @@ -434,32 +548,170 @@ |
| 434 | 548 | } |
| 435 | 549 | // We must use `image.class conformsToProtocol:` instead of `image conformsToProtocol:` here |
| 436 | 550 | // Because UIKit on macOS, using internal hard-coded override method, which returns NO |
| 437 | - id<SDAnimatedImageCoder> currentAnimatedCoder = [self progressiveAnimatedCoderForImage:image]; | |
| 438 | - if (currentAnimatedCoder) { | |
| 551 | + if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)] && image.sd_isIncremental) { | |
| 439 | 552 | UIImage *previousImage = self.image; |
| 440 | - if (!previousImage) { | |
| 441 | - // If current animated coder supports progressive, and no previous image to check, start progressive loading | |
| 442 | - self.isProgressive = YES; | |
| 443 | - } else { | |
| 444 | - id<SDAnimatedImageCoder> previousAnimatedCoder = [self progressiveAnimatedCoderForImage:previousImage]; | |
| 445 | - if (previousAnimatedCoder == currentAnimatedCoder) { | |
| 446 | - // If current animated coder is the same as previous, start progressive loading | |
| 553 | + if ([previousImage.class conformsToProtocol:@protocol(SDAnimatedImage)] && previousImage.sd_isIncremental) { | |
| 554 | + NSData *previousData = [((UIImage<SDAnimatedImage> *)previousImage) animatedImageData]; | |
| 555 | + NSData *currentData = [((UIImage<SDAnimatedImage> *)image) animatedImageData]; | |
| 556 | + // Check whether to use progressive rendering or not | |
| 557 | + if (!previousData || !currentData) { | |
| 558 | + // Early return | |
| 559 | + return; | |
| 560 | + } | |
| 561 | + | |
| 562 | + // Warning: normally the `previousData` is same instance as `currentData` because our `SDAnimatedImage` class share the same `coder` instance internally. But there may be a race condition, that later retrived `currentData` is already been updated and it's not the same instance as `previousData`. | |
| 563 | + // And for protocol extensible design, we should not assume `SDAnimatedImage` protocol implementations always share same instance. So both of two reasons, we need that `rangeOfData` check. | |
| 564 | + if ([currentData isEqualToData:previousData]) { | |
| 565 | + // If current data is the same data (or instance) as previous data | |
| 447 | 566 | self.isProgressive = YES; |
| 567 | + } else if (currentData.length > previousData.length) { | |
| 568 | + // If current data is appended by previous data, use `NSDataSearchAnchored`, search is limited to start of currentData | |
| 569 | + NSRange range = [currentData rangeOfData:previousData options:NSDataSearchAnchored range:NSMakeRange(0, previousData.length)]; | |
| 570 | + if (range.location != NSNotFound) { | |
| 571 | + // Contains hole previous data and they start with the same beginning | |
| 572 | + self.isProgressive = YES; | |
| 573 | + } | |
| 448 | 574 | } |
| 575 | + } else { | |
| 576 | + // Previous image is not progressive, so start progressive rendering | |
| 577 | + self.isProgressive = YES; | |
| 449 | 578 | } |
| 450 | 579 | } |
| 451 | 580 | } |
| 452 | 581 | |
| 453 | -// Check if image can represent a `Progressive Animated Image` during loading | |
| 454 | -- (id<SDAnimatedImageCoder, SDProgressiveImageCoder>)progressiveAnimatedCoderForImage:(UIImage *)image | |
| 582 | +#if SD_MAC | |
| 583 | +- (void)displayDidRefresh:(CVDisplayLinkRef)displayLink duration:(NSTimeInterval)duration | |
| 584 | +#else | |
| 585 | +- (void)displayDidRefresh:(CADisplayLink *)displayLink | |
| 586 | +#endif | |
| 455 | 587 | { |
| 456 | - if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)] && image.sd_isIncremental && [image respondsToSelector:@selector(animatedCoder)]) { | |
| 457 | - id<SDAnimatedImageCoder> animatedCoder = [(id<SDAnimatedImage>)image animatedCoder]; | |
| 458 | - if ([animatedCoder conformsToProtocol:@protocol(SDProgressiveImageCoder)]) { | |
| 459 | - return (id<SDAnimatedImageCoder, SDProgressiveImageCoder>)animatedCoder; | |
| 588 | + // If for some reason a wild call makes it through when we shouldn't be animating, bail. | |
| 589 | + // Early return! | |
| 590 | + if (!self.shouldAnimate) { | |
| 591 | + return; | |
| 592 | + } | |
| 593 | + // Calculate refresh duration | |
| 594 | +#if SD_UIKIT | |
| 595 | +#pragma clang diagnostic push | |
| 596 | +#pragma clang diagnostic ignored "-Wdeprecated-declarations" | |
| 597 | + NSTimeInterval duration = displayLink.duration * displayLink.frameInterval; | |
| 598 | +#pragma clang diagnostic pop | |
| 599 | +#endif | |
| 600 | + NSUInteger totalFrameCount = self.totalFrameCount; | |
| 601 | + NSUInteger currentFrameIndex = self.currentFrameIndex; | |
| 602 | + NSUInteger nextFrameIndex = (currentFrameIndex + 1) % totalFrameCount; | |
| 603 | + | |
| 604 | + // Check if we have the frame buffer firstly to improve performance | |
| 605 | + if (!self.bufferMiss) { | |
| 606 | + // Then check if timestamp is reached | |
| 607 | + self.currentTime += duration; | |
| 608 | + NSTimeInterval currentDuration = [self.animatedImage animatedImageDurationAtIndex:currentFrameIndex]; | |
| 609 | + if (self.currentTime < currentDuration) { | |
| 610 | + // Current frame timestamp not reached, return | |
| 611 | + return; | |
| 612 | + } | |
| 613 | + self.currentTime -= currentDuration; | |
| 614 | + NSTimeInterval nextDuration = [self.animatedImage animatedImageDurationAtIndex:nextFrameIndex]; | |
| 615 | + if (self.currentTime > nextDuration) { | |
| 616 | + // Do not skip frame | |
| 617 | + self.currentTime = nextDuration; | |
| 618 | + } | |
| 619 | + } | |
| 620 | + | |
| 621 | + // Update the current frame | |
| 622 | + UIImage *currentFrame; | |
| 623 | + UIImage *fetchFrame; | |
| 624 | + SD_LOCK(self.lock); | |
| 625 | + currentFrame = self.frameBuffer[@(currentFrameIndex)]; | |
| 626 | + fetchFrame = currentFrame ? self.frameBuffer[@(nextFrameIndex)] : nil; | |
| 627 | + SD_UNLOCK(self.lock); | |
| 628 | + BOOL bufferFull = NO; | |
| 629 | + if (currentFrame) { | |
| 630 | + SD_LOCK(self.lock); | |
| 631 | + // Remove the frame buffer if need | |
| 632 | + if (self.frameBuffer.count > self.maxBufferCount) { | |
| 633 | + self.frameBuffer[@(currentFrameIndex)] = nil; | |
| 634 | + } | |
| 635 | + // Check whether we can stop fetch | |
| 636 | + if (self.frameBuffer.count == totalFrameCount) { | |
| 637 | + bufferFull = YES; | |
| 638 | + } | |
| 639 | + SD_UNLOCK(self.lock); | |
| 640 | + self.currentFrame = currentFrame; | |
| 641 | + self.currentFrameIndex = nextFrameIndex; | |
| 642 | + self.bufferMiss = NO; | |
| 643 | + [self.imageViewLayer setNeedsDisplay]; | |
| 644 | + } else { | |
| 645 | + self.bufferMiss = YES; | |
| 646 | + } | |
| 647 | + | |
| 648 | + // Update the loop count when last frame rendered | |
| 649 | + if (nextFrameIndex == 0 && !self.bufferMiss) { | |
| 650 | + // Progressive image reach the current last frame index. Keep the state and stop animating. Wait for later restart | |
| 651 | + if (self.isProgressive) { | |
| 652 | + // Recovery the current frame index and removed frame buffer (See above) | |
| 653 | + self.currentFrameIndex = currentFrameIndex; | |
| 654 | + SD_LOCK(self.lock); | |
| 655 | + self.frameBuffer[@(currentFrameIndex)] = self.currentFrame; | |
| 656 | + SD_UNLOCK(self.lock); | |
| 657 | + [self stopAnimating]; | |
| 658 | + return; | |
| 659 | + } | |
| 660 | + // Update the loop count | |
| 661 | + self.currentLoopCount++; | |
| 662 | + // if reached the max loop count, stop animating, 0 means loop indefinitely | |
| 663 | + NSUInteger maxLoopCount = self.shouldCustomLoopCount ? self.animationRepeatCount : self.totalLoopCount; | |
| 664 | + if (maxLoopCount != 0 && (self.currentLoopCount >= maxLoopCount)) { | |
| 665 | + [self stopAnimating]; | |
| 666 | + return; | |
| 460 | 667 | } |
| 461 | 668 | } |
| 462 | - return nil; | |
| 669 | + | |
| 670 | + // Check if we should prefetch next frame or current frame | |
| 671 | + NSUInteger fetchFrameIndex; | |
| 672 | + if (self.bufferMiss) { | |
| 673 | + // When buffer miss, means the decode speed is slower than render speed, we fetch current miss frame | |
| 674 | + fetchFrameIndex = currentFrameIndex; | |
| 675 | + } else { | |
| 676 | + // Or, most cases, the decode speed is faster than render speed, we fetch next frame | |
| 677 | + fetchFrameIndex = nextFrameIndex; | |
| 678 | + } | |
| 679 | + | |
| 680 | + if (!fetchFrame && !bufferFull && self.fetchQueue.operationCount == 0) { | |
| 681 | + // Prefetch next frame in background queue | |
| 682 | + UIImage<SDAnimatedImage> *animatedImage = self.animatedImage; | |
| 683 | + @weakify(self); | |
| 684 | + NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ | |
| 685 | + @strongify(self); | |
| 686 | + if (!self) { | |
| 687 | + return; | |
| 688 | + } | |
| 689 | + UIImage *frame = [animatedImage animatedImageFrameAtIndex:fetchFrameIndex]; | |
| 690 | + | |
| 691 | + BOOL isAnimating = NO; | |
| 692 | +#if SD_MAC | |
| 693 | + isAnimating = CVDisplayLinkIsRunning(self.displayLink); | |
| 694 | +#else | |
| 695 | + isAnimating = !self.displayLink.isPaused; | |
| 696 | +#endif | |
| 697 | + if (isAnimating) { | |
| 698 | + SD_LOCK(self.lock); | |
| 699 | + self.frameBuffer[@(fetchFrameIndex)] = frame; | |
| 700 | + SD_UNLOCK(self.lock); | |
| 701 | + } | |
| 702 | + // Ensure when self dealloc, it dealloced on the main queue (UIKit/AppKit rule) | |
| 703 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 704 | + [self class]; | |
| 705 | + }); | |
| 706 | + }]; | |
| 707 | + [self.fetchQueue addOperation:operation]; | |
| 708 | + } | |
| 709 | +} | |
| 710 | + | |
| 711 | ++ (NSString *)defaultRunLoopMode | |
| 712 | +{ | |
| 713 | + // Key off `activeProcessorCount` (as opposed to `processorCount`) since the system could shut down cores in certain situations. | |
| 714 | + return [NSProcessInfo processInfo].activeProcessorCount > 1 ? NSRunLoopCommonModes : NSDefaultRunLoopMode; | |
| 463 | 715 | } |
| 464 | 716 | |
| 465 | 717 | |
| ... | ... | @@ -468,15 +720,9 @@ |
| 468 | 720 | |
| 469 | 721 | - (void)displayLayer:(CALayer *)layer |
| 470 | 722 | { |
| 471 | - UIImage *currentFrame = self.currentFrame; | |
| 472 | - if (currentFrame) { | |
| 473 | - layer.contentsScale = currentFrame.scale; | |
| 474 | - layer.contents = (__bridge id)currentFrame.CGImage; | |
| 475 | - } else { | |
| 476 | - // If we have no animation frames, call super implementation. iOS 14+ UIImageView use this delegate method for rendering. | |
| 477 | - if ([UIImageView instancesRespondToSelector:@selector(displayLayer:)]) { | |
| 478 | - [super displayLayer:layer]; | |
| 479 | - } | |
| 723 | + if (self.currentFrame) { | |
| 724 | + layer.contentsScale = self.animatedImageScale; | |
| 725 | + layer.contents = (__bridge id)self.currentFrame.CGImage; | |
| 480 | 726 | } |
| 481 | 727 | } |
| 482 | 728 | |
| ... | ... | @@ -484,10 +730,10 @@ |
| 484 | 730 | // NSImageView use a subview. We need this subview's layer for actual rendering. |
| 485 | 731 | // Why using this design may because of properties like `imageAlignment` and `imageScaling`, which it's not available for UIImageView.contentMode (it's impossible to align left and keep aspect ratio at the same time) |
| 486 | 732 | - (NSView *)imageView { |
| 487 | - NSImageView *imageView = objc_getAssociatedObject(self, SD_SEL_SPI(imageView)); | |
| 733 | + NSImageView *imageView = imageView = objc_getAssociatedObject(self, NSSelectorFromString(@"_imageView")); | |
| 488 | 734 | if (!imageView) { |
| 489 | 735 | // macOS 10.14 |
| 490 | - imageView = objc_getAssociatedObject(self, SD_SEL_SPI(imageSubview)); | |
| 736 | + imageView = objc_getAssociatedObject(self, NSSelectorFromString(@"_imageSubview")); | |
| 491 | 737 | } |
| 492 | 738 | return imageView; |
| 493 | 739 | } |
| ... | ... | @@ -514,6 +760,45 @@ |
| 514 | 760 | |
| 515 | 761 | #endif |
| 516 | 762 | |
| 763 | + | |
| 764 | +#pragma mark - Util | |
| 765 | +- (void)calculateMaxBufferCount { | |
| 766 | + NSUInteger bytes = CGImageGetBytesPerRow(self.currentFrame.CGImage) * CGImageGetHeight(self.currentFrame.CGImage); | |
| 767 | + if (bytes == 0) bytes = 1024; | |
| 768 | + | |
| 769 | + NSUInteger max = 0; | |
| 770 | + if (self.maxBufferSize > 0) { | |
| 771 | + max = self.maxBufferSize; | |
| 772 | + } else { | |
| 773 | + // Calculate based on current memory, these factors are by experience | |
| 774 | + NSUInteger total = SDDeviceTotalMemory(); | |
| 775 | + NSUInteger free = SDDeviceFreeMemory(); | |
| 776 | + max = MIN(total * 0.2, free * 0.6); | |
| 777 | + } | |
| 778 | + | |
| 779 | + NSUInteger maxBufferCount = (double)max / (double)bytes; | |
| 780 | + if (!maxBufferCount) { | |
| 781 | + // At least 1 frame | |
| 782 | + maxBufferCount = 1; | |
| 783 | + } | |
| 784 | + | |
| 785 | + self.maxBufferCount = maxBufferCount; | |
| 786 | +} | |
| 787 | + | |
| 517 | 788 | @end |
| 518 | 789 | |
| 790 | +#if SD_MAC | |
| 791 | +static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext) { | |
| 792 | + // Calculate refresh duration | |
| 793 | + NSTimeInterval duration = (double)inOutputTime->videoRefreshPeriod / ((double)inOutputTime->videoTimeScale * inOutputTime->rateScalar); | |
| 794 | + // CVDisplayLink callback is not on main queue | |
| 795 | + SDAnimatedImageView *imageView = (__bridge SDAnimatedImageView *)displayLinkContext; | |
| 796 | + __weak SDAnimatedImageView *weakImageView = imageView; | |
| 797 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 798 | + [weakImageView displayDidRefresh:displayLink duration:duration]; | |
| 799 | + }); | |
| 800 | + return kCVReturnSuccess; | |
| 801 | +} | |
| 802 | +#endif | |
| 803 | + | |
| 519 | 804 | #endif | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.h
| ... | ... | @@ -55,26 +55,6 @@ |
| 55 | 55 | - (void)setData:(nullable NSData *)data forKey:(nonnull NSString *)key; |
| 56 | 56 | |
| 57 | 57 | /** |
| 58 | - Returns the extended data associated with a given key. | |
| 59 | - This method may blocks the calling thread until file read finished. | |
| 60 | - | |
| 61 | - @param key A string identifying the data. If nil, just return nil. | |
| 62 | - @return The value associated with key, or nil if no value is associated with key. | |
| 63 | - */ | |
| 64 | -- (nullable NSData *)extendedDataForKey:(nonnull NSString *)key; | |
| 65 | - | |
| 66 | -/** | |
| 67 | - Set extended data with a given key. | |
| 68 | - | |
| 69 | - @discussion You can set any extended data to exist cache key. Without override the exist disk file data. | |
| 70 | - on UNIX, the common way for this is to use the Extended file attributes (xattr) | |
| 71 | - | |
| 72 | - @param extendedData The extended data (pass nil to remove). | |
| 73 | - @param key The key with which to associate the value. If nil, this method has no effect. | |
| 74 | -*/ | |
| 75 | -- (void)setExtendedData:(nullable NSData *)extendedData forKey:(nonnull NSString *)key; | |
| 76 | - | |
| 77 | -/** | |
| 78 | 58 | Removes the value of the specified key in the cache. |
| 79 | 59 | This method may blocks the calling thread until file delete finished. |
| 80 | 60 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m
| ... | ... | @@ -8,11 +8,8 @@ |
| 8 | 8 | |
| 9 | 9 | #import "SDDiskCache.h" |
| 10 | 10 | #import "SDImageCacheConfig.h" |
| 11 | -#import "SDFileAttributeHelper.h" | |
| 12 | 11 | #import <CommonCrypto/CommonDigest.h> |
| 13 | 12 | |
| 14 | -static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDiskCache"; | |
| 15 | - | |
| 16 | 13 | @interface SDDiskCache () |
| 17 | 14 | |
| 18 | 15 | @property (nonatomic, copy) NSString *diskCachePath; |
| ... | ... | @@ -86,7 +83,7 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis |
| 86 | 83 | |
| 87 | 84 | // get cache Path for image key |
| 88 | 85 | NSString *cachePathForKey = [self cachePathForKey:key]; |
| 89 | - // transform to NSURL | |
| 86 | + // transform to NSUrl | |
| 90 | 87 | NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey]; |
| 91 | 88 | |
| 92 | 89 | [data writeToURL:fileURL options:self.config.diskCacheWritingOptions error:nil]; |
| ... | ... | @@ -98,31 +95,6 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis |
| 98 | 95 | } |
| 99 | 96 | } |
| 100 | 97 | |
| 101 | -- (NSData *)extendedDataForKey:(NSString *)key { | |
| 102 | - NSParameterAssert(key); | |
| 103 | - | |
| 104 | - // get cache Path for image key | |
| 105 | - NSString *cachePathForKey = [self cachePathForKey:key]; | |
| 106 | - | |
| 107 | - NSData *extendedData = [SDFileAttributeHelper extendedAttribute:SDDiskCacheExtendedAttributeName atPath:cachePathForKey traverseLink:NO error:nil]; | |
| 108 | - | |
| 109 | - return extendedData; | |
| 110 | -} | |
| 111 | - | |
| 112 | -- (void)setExtendedData:(NSData *)extendedData forKey:(NSString *)key { | |
| 113 | - NSParameterAssert(key); | |
| 114 | - // get cache Path for image key | |
| 115 | - NSString *cachePathForKey = [self cachePathForKey:key]; | |
| 116 | - | |
| 117 | - if (!extendedData) { | |
| 118 | - // Remove | |
| 119 | - [SDFileAttributeHelper removeExtendedAttribute:SDDiskCacheExtendedAttributeName atPath:cachePathForKey traverseLink:NO error:nil]; | |
| 120 | - } else { | |
| 121 | - // Override | |
| 122 | - [SDFileAttributeHelper setExtendedAttribute:SDDiskCacheExtendedAttributeName value:extendedData atPath:cachePathForKey traverseLink:NO overwrite:YES error:nil]; | |
| 123 | - } | |
| 124 | -} | |
| 125 | - | |
| 126 | 98 | - (void)removeDataForKey:(NSString *)key { |
| 127 | 99 | NSParameterAssert(key); |
| 128 | 100 | NSString *filePath = [self cachePathForKey:key]; |
| ... | ... | @@ -146,15 +118,11 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis |
| 146 | 118 | case SDImageCacheConfigExpireTypeAccessDate: |
| 147 | 119 | cacheContentDateKey = NSURLContentAccessDateKey; |
| 148 | 120 | break; |
| 121 | + | |
| 149 | 122 | case SDImageCacheConfigExpireTypeModificationDate: |
| 150 | 123 | cacheContentDateKey = NSURLContentModificationDateKey; |
| 151 | 124 | break; |
| 152 | - case SDImageCacheConfigExpireTypeCreationDate: | |
| 153 | - cacheContentDateKey = NSURLCreationDateKey; | |
| 154 | - break; | |
| 155 | - case SDImageCacheConfigExpireTypeChangeDate: | |
| 156 | - cacheContentDateKey = NSURLAttributeModificationDateKey; | |
| 157 | - break; | |
| 125 | + | |
| 158 | 126 | default: |
| 159 | 127 | break; |
| 160 | 128 | } | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m
| ... | ... | @@ -13,7 +13,7 @@ |
| 13 | 13 | #import <MobileCoreServices/MobileCoreServices.h> |
| 14 | 14 | #endif |
| 15 | 15 | |
| 16 | -// iOS 8 Image/IO framework binary does not contains these APNG constants, so we define them. Thanks Apple :) | |
| 16 | +// iOS 8 Image/IO framework binary does not contains these APNG contants, so we define them. Thanks Apple :) | |
| 17 | 17 | // We can not use runtime @available check for this issue, because it's a global symbol and should be loaded during launch time by dyld. So hack if the min deployment target version < iOS 9.0, whatever it running on iOS 9+ or not. |
| 18 | 18 | #if (__IPHONE_OS_VERSION_MIN_REQUIRED && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) |
| 19 | 19 | const CFStringRef kCGImagePropertyAPNGLoopCount = (__bridge CFStringRef)@"LoopCount"; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h
| ... | ... | @@ -40,7 +40,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 40 | 40 | */ |
| 41 | 41 | SDImageCacheAvoidDecodeImage = 1 << 4, |
| 42 | 42 | /** |
| 43 | - * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. | |
| 43 | + * By default, we decode the animated image. This flag can force decode the first frame only and produece the static image. | |
| 44 | 44 | */ |
| 45 | 45 | SDImageCacheDecodeFirstFrameOnly = 1 << 5, |
| 46 | 46 | /** |
| ... | ... | @@ -49,7 +49,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 49 | 49 | SDImageCachePreloadAllFrames = 1 << 6, |
| 50 | 50 | /** |
| 51 | 51 | * By default, when you use `SDWebImageContextAnimatedImageClass` context option (like using `SDAnimatedImageView` which designed to use `SDAnimatedImage`), we may still use `UIImage` when the memory cache hit, or image decoder is not available, to behave as a fallback solution. |
| 52 | - * Using this option, can ensure we always produce image with your provided class. If failed, an error with code `SDWebImageErrorBadImageData` will be used. | |
| 52 | + * Using this option, can ensure we always produce image with your provided class. If failed, a error with code `SDWebImageErrorBadImageData` will been used. | |
| 53 | 53 | * Note this options is not compatible with `SDImageCacheDecodeFirstFrameOnly`, which always produce a UIImage/NSImage. |
| 54 | 54 | */ |
| 55 | 55 | SDImageCacheMatchAnimatedImageClass = 1 << 7, |
| ... | ... | @@ -65,7 +65,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 65 | 65 | |
| 66 | 66 | /** |
| 67 | 67 | * Cache Config object - storing all kind of settings. |
| 68 | - * The property is copy so change of current config will not accidentally affect other cache's config. | |
| 68 | + * The property is copy so change of currrent config will not accidentally affect other cache's config. | |
| 69 | 69 | */ |
| 70 | 70 | @property (nonatomic, copy, nonnull, readonly) SDImageCacheConfig *config; |
| 71 | 71 | |
| ... | ... | @@ -162,7 +162,6 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 162 | 162 | * @param key The unique image cache key, usually it's image absolute URL |
| 163 | 163 | * @param toDisk Store the image to disk cache if YES. If NO, the completion block is called synchronously |
| 164 | 164 | * @param completionBlock A block executed after the operation is finished |
| 165 | - * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. | |
| 166 | 165 | */ |
| 167 | 166 | - (void)storeImage:(nullable UIImage *)image |
| 168 | 167 | forKey:(nullable NSString *)key |
| ... | ... | @@ -179,7 +178,6 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 179 | 178 | * @param key The unique image cache key, usually it's image absolute URL |
| 180 | 179 | * @param toDisk Store the image to disk cache if YES. If NO, the completion block is called synchronously |
| 181 | 180 | * @param completionBlock A block executed after the operation is finished |
| 182 | - * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. | |
| 183 | 181 | */ |
| 184 | 182 | - (void)storeImage:(nullable UIImage *)image |
| 185 | 183 | imageData:(nullable NSData *)imageData |
| ... | ... | @@ -227,7 +225,8 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 227 | 225 | #pragma mark - Query and Retrieve Ops |
| 228 | 226 | |
| 229 | 227 | /** |
| 230 | - * Synchronously query the image data for the given key in disk cache. You can decode the image data to image after loaded. | |
| 228 | + * Asynchronously queries the cache with operation and call the completion when done. | |
| 229 | + * Query the image data for the given key synchronously. | |
| 231 | 230 | * |
| 232 | 231 | * @param key The unique key used to store the wanted image |
| 233 | 232 | * @return The image data for the given key, or nil if not found. |
| ... | ... | @@ -235,18 +234,9 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 235 | 234 | - (nullable NSData *)diskImageDataForKey:(nullable NSString *)key; |
| 236 | 235 | |
| 237 | 236 | /** |
| 238 | - * Asynchronously query the image data for the given key in disk cache. You can decode the image data to image after loaded. | |
| 237 | + * Operation that queries the cache asynchronously and call the completion when done. | |
| 239 | 238 | * |
| 240 | - * @param key The unique key used to store the wanted image | |
| 241 | - * @param completionBlock the block to be executed when the query is done. | |
| 242 | - * @note the completion block will be always executed on the main queue | |
| 243 | - */ | |
| 244 | -- (void)diskImageDataQueryForKey:(nullable NSString *)key completion:(nullable SDImageCacheQueryDataCompletionBlock)completionBlock; | |
| 245 | - | |
| 246 | -/** | |
| 247 | - * Asynchronously queries the cache with operation and call the completion when done. | |
| 248 | - * | |
| 249 | - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. | |
| 239 | + * @param key The unique key used to store the wanted image | |
| 250 | 240 | * @param doneBlock The completion block. Will not get called if the operation is cancelled |
| 251 | 241 | * |
| 252 | 242 | * @return a NSOperation instance containing the cache op |
| ... | ... | @@ -256,7 +246,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 256 | 246 | /** |
| 257 | 247 | * Asynchronously queries the cache with operation and call the completion when done. |
| 258 | 248 | * |
| 259 | - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. | |
| 249 | + * @param key The unique key used to store the wanted image | |
| 260 | 250 | * @param options A mask to specify options to use for this cache query |
| 261 | 251 | * @param doneBlock The completion block. Will not get called if the operation is cancelled |
| 262 | 252 | * |
| ... | ... | @@ -267,7 +257,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 267 | 257 | /** |
| 268 | 258 | * Asynchronously queries the cache with operation and call the completion when done. |
| 269 | 259 | * |
| 270 | - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. | |
| 260 | + * @param key The unique key used to store the wanted image | |
| 271 | 261 | * @param options A mask to specify options to use for this cache query |
| 272 | 262 | * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. |
| 273 | 263 | * @param doneBlock The completion block. Will not get called if the operation is cancelled |
| ... | ... | @@ -277,19 +267,6 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 277 | 267 | - (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; |
| 278 | 268 | |
| 279 | 269 | /** |
| 280 | - * Asynchronously queries the cache with operation and call the completion when done. | |
| 281 | - * | |
| 282 | - * @param key The unique key used to store the wanted image. If you want transformed or thumbnail image, calculate the key with `SDTransformedKeyForKey`, `SDThumbnailedKeyForKey`, or generate the cache key from url with `cacheKeyForURL:context:`. | |
| 283 | - * @param options A mask to specify options to use for this cache query | |
| 284 | - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. | |
| 285 | - * @param queryCacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. | |
| 286 | - * @param doneBlock The completion block. Will not get called if the operation is cancelled | |
| 287 | - * | |
| 288 | - * @return a NSOperation instance containing the cache op | |
| 289 | - */ | |
| 290 | -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; | |
| 291 | - | |
| 292 | -/** | |
| 293 | 270 | * Synchronously query the memory cache. |
| 294 | 271 | * |
| 295 | 272 | * @param key The unique key used to store the image |
| ... | ... | @@ -306,16 +283,6 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 306 | 283 | - (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key; |
| 307 | 284 | |
| 308 | 285 | /** |
| 309 | - * Synchronously query the disk cache. With the options and context which may effect the image generation. (Such as transformer, animated image, thumbnail, etc) | |
| 310 | - * | |
| 311 | - * @param key The unique key used to store the image | |
| 312 | - * @param options A mask to specify options to use for this cache query | |
| 313 | - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. | |
| 314 | - * @return The image for the given key, or nil if not found. | |
| 315 | - */ | |
| 316 | -- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context; | |
| 317 | - | |
| 318 | -/** | |
| 319 | 286 | * Synchronously query the cache (memory and or disk) after checking the memory cache. |
| 320 | 287 | * |
| 321 | 288 | * @param key The unique key used to store the image |
| ... | ... | @@ -323,16 +290,6 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { |
| 323 | 290 | */ |
| 324 | 291 | - (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key; |
| 325 | 292 | |
| 326 | -/** | |
| 327 | - * Synchronously query the cache (memory and or disk) after checking the memory cache. With the options and context which may effect the image generation. (Such as transformer, animated image, thumbnail, etc) | |
| 328 | - * | |
| 329 | - * @param key The unique key used to store the image | |
| 330 | - * @param options A mask to specify options to use for this cache query | |
| 331 | - * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. | |
| 332 | - * @return The image for the given key, or nil if not found. | |
| 333 | - */ | |
| 334 | -- (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context;; | |
| 335 | - | |
| 336 | 293 | #pragma mark - Remove Ops |
| 337 | 294 | |
| 338 | 295 | /** | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m
| ... | ... | @@ -9,11 +9,11 @@ |
| 9 | 9 | #import "SDImageCache.h" |
| 10 | 10 | #import "NSImage+Compatibility.h" |
| 11 | 11 | #import "SDImageCodersManager.h" |
| 12 | +#import "SDImageTransformer.h" | |
| 12 | 13 | #import "SDImageCoderHelper.h" |
| 13 | 14 | #import "SDAnimatedImage.h" |
| 14 | 15 | #import "UIImage+MemoryCacheCost.h" |
| 15 | 16 | #import "UIImage+Metadata.h" |
| 16 | -#import "UIImage+ExtendedCacheData.h" | |
| 17 | 17 | |
| 18 | 18 | @interface SDImageCache () |
| 19 | 19 | |
| ... | ... | @@ -186,55 +186,17 @@ |
| 186 | 186 | dispatch_async(self.ioQueue, ^{ |
| 187 | 187 | @autoreleasepool { |
| 188 | 188 | NSData *data = imageData; |
| 189 | - if (!data && [image conformsToProtocol:@protocol(SDAnimatedImage)]) { | |
| 190 | - // If image is custom animated image class, prefer its original animated data | |
| 191 | - data = [((id<SDAnimatedImage>)image) animatedImageData]; | |
| 192 | - } | |
| 193 | 189 | if (!data && image) { |
| 194 | - // Check image's associated image format, may return .undefined | |
| 195 | - SDImageFormat format = image.sd_imageFormat; | |
| 196 | - if (format == SDImageFormatUndefined) { | |
| 197 | - // If image is animated, use GIF (APNG may be better, but has bugs before macOS 10.14) | |
| 198 | - if (image.sd_isAnimated) { | |
| 199 | - format = SDImageFormatGIF; | |
| 200 | - } else { | |
| 201 | - // If we do not have any data to detect image format, check whether it contains alpha channel to use PNG or JPEG format | |
| 202 | - if ([SDImageCoderHelper CGImageContainsAlpha:image.CGImage]) { | |
| 203 | - format = SDImageFormatPNG; | |
| 204 | - } else { | |
| 205 | - format = SDImageFormatJPEG; | |
| 206 | - } | |
| 207 | - } | |
| 190 | + // If we do not have any data to detect image format, check whether it contains alpha channel to use PNG or JPEG format | |
| 191 | + SDImageFormat format; | |
| 192 | + if ([SDImageCoderHelper CGImageContainsAlpha:image.CGImage]) { | |
| 193 | + format = SDImageFormatPNG; | |
| 194 | + } else { | |
| 195 | + format = SDImageFormatJPEG; | |
| 208 | 196 | } |
| 209 | 197 | data = [[SDImageCodersManager sharedManager] encodedDataWithImage:image format:format options:nil]; |
| 210 | 198 | } |
| 211 | 199 | [self _storeImageDataToDisk:data forKey:key]; |
| 212 | - if (image) { | |
| 213 | - // Check extended data | |
| 214 | - id extendedObject = image.sd_extendedObject; | |
| 215 | - if ([extendedObject conformsToProtocol:@protocol(NSCoding)]) { | |
| 216 | - NSData *extendedData; | |
| 217 | - if (@available(iOS 11, tvOS 11, macOS 10.13, watchOS 4, *)) { | |
| 218 | - NSError *error; | |
| 219 | - extendedData = [NSKeyedArchiver archivedDataWithRootObject:extendedObject requiringSecureCoding:NO error:&error]; | |
| 220 | - if (error) { | |
| 221 | - NSLog(@"NSKeyedArchiver archive failed with error: %@", error); | |
| 222 | - } | |
| 223 | - } else { | |
| 224 | - @try { | |
| 225 | -#pragma clang diagnostic push | |
| 226 | -#pragma clang diagnostic ignored "-Wdeprecated-declarations" | |
| 227 | - extendedData = [NSKeyedArchiver archivedDataWithRootObject:extendedObject]; | |
| 228 | -#pragma clang diagnostic pop | |
| 229 | - } @catch (NSException *exception) { | |
| 230 | - NSLog(@"NSKeyedArchiver archive failed with exception: %@", exception); | |
| 231 | - } | |
| 232 | - } | |
| 233 | - if (extendedData) { | |
| 234 | - [self.diskCache setExtendedData:extendedData forKey:key]; | |
| 235 | - } | |
| 236 | - } | |
| 237 | - } | |
| 238 | 200 | } |
| 239 | 201 | |
| 240 | 202 | if (completionBlock) { |
| ... | ... | @@ -313,17 +275,6 @@ |
| 313 | 275 | return [self.diskCache containsDataForKey:key]; |
| 314 | 276 | } |
| 315 | 277 | |
| 316 | -- (void)diskImageDataQueryForKey:(NSString *)key completion:(SDImageCacheQueryDataCompletionBlock)completionBlock { | |
| 317 | - dispatch_async(self.ioQueue, ^{ | |
| 318 | - NSData *imageData = [self diskImageDataBySearchingAllPathsForKey:key]; | |
| 319 | - if (completionBlock) { | |
| 320 | - dispatch_async(dispatch_get_main_queue(), ^{ | |
| 321 | - completionBlock(imageData); | |
| 322 | - }); | |
| 323 | - } | |
| 324 | - }); | |
| 325 | -} | |
| 326 | - | |
| 327 | 278 | - (nullable NSData *)diskImageDataForKey:(nullable NSString *)key { |
| 328 | 279 | if (!key) { |
| 329 | 280 | return nil; |
| ... | ... | @@ -341,12 +292,7 @@ |
| 341 | 292 | } |
| 342 | 293 | |
| 343 | 294 | - (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key { |
| 344 | - return [self imageFromDiskCacheForKey:key options:0 context:nil]; | |
| 345 | -} | |
| 346 | - | |
| 347 | -- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context { | |
| 348 | - NSData *data = [self diskImageDataForKey:key]; | |
| 349 | - UIImage *diskImage = [self diskImageForKey:key data:data options:options context:context]; | |
| 295 | + UIImage *diskImage = [self diskImageForKey:key]; | |
| 350 | 296 | if (diskImage && self.config.shouldCacheImagesInMemory) { |
| 351 | 297 | NSUInteger cost = diskImage.sd_memoryCost; |
| 352 | 298 | [self.memoryCache setObject:diskImage forKey:key cost:cost]; |
| ... | ... | @@ -356,10 +302,6 @@ |
| 356 | 302 | } |
| 357 | 303 | |
| 358 | 304 | - (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key { |
| 359 | - return [self imageFromCacheForKey:key options:0 context:nil]; | |
| 360 | -} | |
| 361 | - | |
| 362 | -- (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context { | |
| 363 | 305 | // First check the in-memory cache... |
| 364 | 306 | UIImage *image = [self imageFromMemoryCacheForKey:key]; |
| 365 | 307 | if (image) { |
| ... | ... | @@ -367,7 +309,7 @@ |
| 367 | 309 | } |
| 368 | 310 | |
| 369 | 311 | // Second check the disk cache... |
| 370 | - image = [self imageFromDiskCacheForKey:key options:options context:context]; | |
| 312 | + image = [self imageFromDiskCacheForKey:key]; | |
| 371 | 313 | return image; |
| 372 | 314 | } |
| 373 | 315 | |
| ... | ... | @@ -404,32 +346,6 @@ |
| 404 | 346 | - (nullable UIImage *)diskImageForKey:(nullable NSString *)key data:(nullable NSData *)data options:(SDImageCacheOptions)options context:(SDWebImageContext *)context { |
| 405 | 347 | if (data) { |
| 406 | 348 | UIImage *image = SDImageCacheDecodeImageData(data, key, [[self class] imageOptionsFromCacheOptions:options], context); |
| 407 | - if (image) { | |
| 408 | - // Check extended data | |
| 409 | - NSData *extendedData = [self.diskCache extendedDataForKey:key]; | |
| 410 | - if (extendedData) { | |
| 411 | - id extendedObject; | |
| 412 | - if (@available(iOS 11, tvOS 11, macOS 10.13, watchOS 4, *)) { | |
| 413 | - NSError *error; | |
| 414 | - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:extendedData error:&error]; | |
| 415 | - unarchiver.requiresSecureCoding = NO; | |
| 416 | - extendedObject = [unarchiver decodeTopLevelObjectForKey:NSKeyedArchiveRootObjectKey error:&error]; | |
| 417 | - if (error) { | |
| 418 | - NSLog(@"NSKeyedUnarchiver unarchive failed with error: %@", error); | |
| 419 | - } | |
| 420 | - } else { | |
| 421 | - @try { | |
| 422 | -#pragma clang diagnostic push | |
| 423 | -#pragma clang diagnostic ignored "-Wdeprecated-declarations" | |
| 424 | - extendedObject = [NSKeyedUnarchiver unarchiveObjectWithData:extendedData]; | |
| 425 | -#pragma clang diagnostic pop | |
| 426 | - } @catch (NSException *exception) { | |
| 427 | - NSLog(@"NSKeyedUnarchiver unarchive failed with exception: %@", exception); | |
| 428 | - } | |
| 429 | - } | |
| 430 | - image.sd_extendedObject = extendedObject; | |
| 431 | - } | |
| 432 | - } | |
| 433 | 349 | return image; |
| 434 | 350 | } else { |
| 435 | 351 | return nil; |
| ... | ... | @@ -445,29 +361,22 @@ |
| 445 | 361 | } |
| 446 | 362 | |
| 447 | 363 | - (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { |
| 448 | - return [self queryCacheOperationForKey:key options:options context:context cacheType:SDImageCacheTypeAll done:doneBlock]; | |
| 449 | -} | |
| 450 | - | |
| 451 | -- (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock { | |
| 452 | 364 | if (!key) { |
| 453 | 365 | if (doneBlock) { |
| 454 | 366 | doneBlock(nil, nil, SDImageCacheTypeNone); |
| 455 | 367 | } |
| 456 | 368 | return nil; |
| 457 | 369 | } |
| 458 | - // Invalid cache type | |
| 459 | - if (queryCacheType == SDImageCacheTypeNone) { | |
| 460 | - if (doneBlock) { | |
| 461 | - doneBlock(nil, nil, SDImageCacheTypeNone); | |
| 462 | - } | |
| 463 | - return nil; | |
| 370 | + | |
| 371 | + id<SDImageTransformer> transformer = context[SDWebImageContextImageTransformer]; | |
| 372 | + if (transformer) { | |
| 373 | + // grab the transformed disk image if transformer provided | |
| 374 | + NSString *transformerKey = [transformer transformerKey]; | |
| 375 | + key = SDTransformedKeyForKey(key, transformerKey); | |
| 464 | 376 | } |
| 465 | 377 | |
| 466 | 378 | // First check the in-memory cache... |
| 467 | - UIImage *image; | |
| 468 | - if (queryCacheType != SDImageCacheTypeDisk) { | |
| 469 | - image = [self imageFromMemoryCacheForKey:key]; | |
| 470 | - } | |
| 379 | + UIImage *image = [self imageFromMemoryCacheForKey:key]; | |
| 471 | 380 | |
| 472 | 381 | if (image) { |
| 473 | 382 | if (options & SDImageCacheDecodeFirstFrameOnly) { |
| ... | ... | @@ -490,7 +399,7 @@ |
| 490 | 399 | } |
| 491 | 400 | } |
| 492 | 401 | |
| 493 | - BOOL shouldQueryMemoryOnly = (queryCacheType == SDImageCacheTypeMemory) || (image && !(options & SDImageCacheQueryMemoryData)); | |
| 402 | + BOOL shouldQueryMemoryOnly = (image && !(options & SDImageCacheQueryMemoryData)); | |
| 494 | 403 | if (shouldQueryMemoryOnly) { |
| 495 | 404 | if (doneBlock) { |
| 496 | 405 | doneBlock(image, nil, SDImageCacheTypeMemory); |
| ... | ... | @@ -604,7 +513,7 @@ |
| 604 | 513 | }); |
| 605 | 514 | } |
| 606 | 515 | |
| 607 | -// Make sure to call from io queue by caller | |
| 516 | +// Make sure to call form io queue by caller | |
| 608 | 517 | - (void)_removeImageFromDiskForKey:(NSString *)key { |
| 609 | 518 | if (!key) { |
| 610 | 519 | return; |
| ... | ... | @@ -725,10 +634,6 @@ |
| 725 | 634 | #pragma mark - SDImageCache |
| 726 | 635 | |
| 727 | 636 | - (id<SDWebImageOperation>)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock { |
| 728 | - return [self queryImageForKey:key options:options context:context cacheType:SDImageCacheTypeAll completion:completionBlock]; | |
| 729 | -} | |
| 730 | - | |
| 731 | -- (id<SDWebImageOperation>)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock { | |
| 732 | 637 | SDImageCacheOptions cacheOptions = 0; |
| 733 | 638 | if (options & SDWebImageQueryMemoryData) cacheOptions |= SDImageCacheQueryMemoryData; |
| 734 | 639 | if (options & SDWebImageQueryMemoryDataSync) cacheOptions |= SDImageCacheQueryMemoryDataSync; |
| ... | ... | @@ -739,7 +644,7 @@ |
| 739 | 644 | if (options & SDWebImagePreloadAllFrames) cacheOptions |= SDImageCachePreloadAllFrames; |
| 740 | 645 | if (options & SDWebImageMatchAnimatedImageClass) cacheOptions |= SDImageCacheMatchAnimatedImageClass; |
| 741 | 646 | |
| 742 | - return [self queryCacheOperationForKey:key options:cacheOptions context:context cacheType:cacheType done:completionBlock]; | |
| 647 | + return [self queryCacheOperationForKey:key options:cacheOptions context:context done:completionBlock]; | |
| 743 | 648 | } |
| 744 | 649 | |
| 745 | 650 | - (void)storeImage:(UIImage *)image imageData:(NSData *)imageData forKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType completion:(nullable SDWebImageNoParamsBlock)completionBlock { | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h
| ... | ... | @@ -12,21 +12,13 @@ |
| 12 | 12 | /// Image Cache Expire Type |
| 13 | 13 | typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { |
| 14 | 14 | /** |
| 15 | - * When the image cache is accessed it will update this value | |
| 15 | + * When the image is accessed it will update this value | |
| 16 | 16 | */ |
| 17 | 17 | SDImageCacheConfigExpireTypeAccessDate, |
| 18 | 18 | /** |
| 19 | - * When the image cache is created or modified it will update this value (Default) | |
| 19 | + * The image was obtained from the disk cache (Default) | |
| 20 | 20 | */ |
| 21 | - SDImageCacheConfigExpireTypeModificationDate, | |
| 22 | - /** | |
| 23 | - * When the image cache is created it will update this value | |
| 24 | - */ | |
| 25 | - SDImageCacheConfigExpireTypeCreationDate, | |
| 26 | - /** | |
| 27 | - * When the image cache is created, modified, renamed, file attribute updated (like permission, xattr) it will update this value | |
| 28 | - */ | |
| 29 | - SDImageCacheConfigExpireTypeChangeDate, | |
| 21 | + SDImageCacheConfigExpireTypeModificationDate | |
| 30 | 22 | }; |
| 31 | 23 | |
| 32 | 24 | /** |
| ... | ... | @@ -57,7 +49,7 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { |
| 57 | 49 | /* |
| 58 | 50 | * The option to control weak memory cache for images. When enable, `SDImageCache`'s memory cache will use a weak maptable to store the image at the same time when it stored to memory, and get removed at the same time. |
| 59 | 51 | * However when memory warning is triggered, since the weak maptable does not hold a strong reference to image instance, even when the memory cache itself is purged, some images which are held strongly by UIImageViews or other live instances can be recovered again, to avoid later re-query from disk cache or network. This may be helpful for the case, for example, when app enter background and memory is purged, cause cell flashing after re-enter foreground. |
| 60 | - * Defaults to YES. You can change this option dynamically. | |
| 52 | + * Defautls to YES. You can change this option dynamically. | |
| 61 | 53 | */ |
| 62 | 54 | @property (assign, nonatomic) BOOL shouldUseWeakMemoryCache; |
| 63 | 55 | |
| ... | ... | @@ -115,7 +107,7 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { |
| 115 | 107 | /** |
| 116 | 108 | * The custom file manager for disk cache. Pass nil to let disk cache choose the proper file manager. |
| 117 | 109 | * Defaults to nil. |
| 118 | - * @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect. | |
| 110 | + * @note This value does not support dynamic changes. Which means further modification on this value after cache initlized has no effect. | |
| 119 | 111 | * @note Since `NSFileManager` does not support `NSCopying`. We just pass this by reference during copying. So it's not recommend to set this value on `defaultCacheConfig`. |
| 120 | 112 | */ |
| 121 | 113 | @property (strong, nonatomic, nullable) NSFileManager *fileManager; |
| ... | ... | @@ -123,14 +115,14 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { |
| 123 | 115 | /** |
| 124 | 116 | * The custom memory cache class. Provided class instance must conform to `SDMemoryCache` protocol to allow usage. |
| 125 | 117 | * Defaults to built-in `SDMemoryCache` class. |
| 126 | - * @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect. | |
| 118 | + * @note This value does not support dynamic changes. Which means further modification on this value after cache initlized has no effect. | |
| 127 | 119 | */ |
| 128 | 120 | @property (assign, nonatomic, nonnull) Class memoryCacheClass; |
| 129 | 121 | |
| 130 | 122 | /** |
| 131 | 123 | * The custom disk cache class. Provided class instance must conform to `SDDiskCache` protocol to allow usage. |
| 132 | 124 | * Defaults to built-in `SDDiskCache` class. |
| 133 | - * @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect. | |
| 125 | + * @note This value does not support dynamic changes. Which means further modification on this value after cache initlized has no effect. | |
| 134 | 126 | */ |
| 135 | 127 | @property (assign ,nonatomic, nonnull) Class diskCacheClass; |
| 136 | 128 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h
| ... | ... | @@ -36,7 +36,6 @@ typedef NS_ENUM(NSInteger, SDImageCacheType) { |
| 36 | 36 | }; |
| 37 | 37 | |
| 38 | 38 | typedef void(^SDImageCacheCheckCompletionBlock)(BOOL isInCache); |
| 39 | -typedef void(^SDImageCacheQueryDataCompletionBlock)(NSData * _Nullable data); | |
| 40 | 39 | typedef void(^SDImageCacheCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize); |
| 41 | 40 | typedef NSString * _Nullable (^SDImageCacheAdditionalCachePathBlock)(NSString * _Nonnull key); |
| 42 | 41 | typedef void(^SDImageCacheQueryCompletionBlock)(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType); |
| ... | ... | @@ -64,7 +63,7 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonn |
| 64 | 63 | @required |
| 65 | 64 | /** |
| 66 | 65 | Query the cached image from image cache for given key. The operation can be used to cancel the query. |
| 67 | - If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) | |
| 66 | + If image is cached in memory, completion is called synchronously, else aynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) | |
| 68 | 67 | |
| 69 | 68 | @param key The image cache key |
| 70 | 69 | @param options A mask to specify options to use for this query |
| ... | ... | @@ -78,24 +77,7 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonn |
| 78 | 77 | completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; |
| 79 | 78 | |
| 80 | 79 | /** |
| 81 | - Query the cached image from image cache for given key. The operation can be used to cancel the query. | |
| 82 | - If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) | |
| 83 | - | |
| 84 | - @param key The image cache key | |
| 85 | - @param options A mask to specify options to use for this query | |
| 86 | - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. | |
| 87 | - @param cacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. | |
| 88 | - @param completionBlock The completion block. Will not get called if the operation is cancelled | |
| 89 | - @return The operation for this query | |
| 90 | - */ | |
| 91 | -- (nullable id<SDWebImageOperation>)queryImageForKey:(nullable NSString *)key | |
| 92 | - options:(SDWebImageOptions)options | |
| 93 | - context:(nullable SDWebImageContext *)context | |
| 94 | - cacheType:(SDImageCacheType)cacheType | |
| 95 | - completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; | |
| 96 | - | |
| 97 | -/** | |
| 98 | - Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. | |
| 80 | + Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else aynchronously. | |
| 99 | 81 | |
| 100 | 82 | @param image The image to store |
| 101 | 83 | @param imageData The image data to be used for disk storage |
| ... | ... | @@ -110,7 +92,7 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonn |
| 110 | 92 | completion:(nullable SDWebImageNoParamsBlock)completionBlock; |
| 111 | 93 | |
| 112 | 94 | /** |
| 113 | - Remove the image from image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. | |
| 95 | + Remove the image from image cache for the given key. If cache type is memory only, completion is called synchronously, else aynchronously. | |
| 114 | 96 | |
| 115 | 97 | @param key The image cache key |
| 116 | 98 | @param cacheType The image remove op cache type |
| ... | ... | @@ -121,7 +103,7 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonn |
| 121 | 103 | completion:(nullable SDWebImageNoParamsBlock)completionBlock; |
| 122 | 104 | |
| 123 | 105 | /** |
| 124 | - Check if image cache contains the image for the given key (does not load the image). If image is cached in memory, completion is called synchronously, else asynchronously. | |
| 106 | + Check if image cache contains the image for the given key (does not load the image). If image is cached in memory, completion is called synchronously, else aynchronously. | |
| 125 | 107 | |
| 126 | 108 | @param key The image cache key |
| 127 | 109 | @param cacheType The image contains op cache type |
| ... | ... | @@ -132,7 +114,7 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonn |
| 132 | 114 | completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock; |
| 133 | 115 | |
| 134 | 116 | /** |
| 135 | - Clear all the cached images for image cache. If cache type is memory only, completion is called synchronously, else asynchronously. | |
| 117 | + Clear all the cached images for image cache. If cache type is memory only, completion is called synchronously, else aynchronously. | |
| 136 | 118 | |
| 137 | 119 | @param cacheType The image clear op cache type |
| 138 | 120 | @param completionBlock A block executed after the operation is finished | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m
| ... | ... | @@ -18,32 +18,11 @@ UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSS |
| 18 | 18 | BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); |
| 19 | 19 | NSNumber *scaleValue = context[SDWebImageContextImageScaleFactor]; |
| 20 | 20 | CGFloat scale = scaleValue.doubleValue >= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); |
| 21 | - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; | |
| 22 | - NSValue *thumbnailSizeValue; | |
| 23 | - BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); | |
| 24 | - if (shouldScaleDown) { | |
| 25 | - CGFloat thumbnailPixels = SDImageCoderHelper.defaultScaleDownLimitBytes / 4; | |
| 26 | - CGFloat dimension = ceil(sqrt(thumbnailPixels)); | |
| 27 | - thumbnailSizeValue = @(CGSizeMake(dimension, dimension)); | |
| 28 | - } | |
| 29 | - if (context[SDWebImageContextImageThumbnailPixelSize]) { | |
| 30 | - thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; | |
| 31 | - } | |
| 32 | - | |
| 33 | - SDImageCoderMutableOptions *mutableCoderOptions = [NSMutableDictionary dictionaryWithCapacity:2]; | |
| 34 | - mutableCoderOptions[SDImageCoderDecodeFirstFrameOnly] = @(decodeFirstFrame); | |
| 35 | - mutableCoderOptions[SDImageCoderDecodeScaleFactor] = @(scale); | |
| 36 | - mutableCoderOptions[SDImageCoderDecodePreserveAspectRatio] = preserveAspectRatioValue; | |
| 37 | - mutableCoderOptions[SDImageCoderDecodeThumbnailPixelSize] = thumbnailSizeValue; | |
| 38 | - mutableCoderOptions[SDImageCoderWebImageContext] = context; | |
| 39 | - SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; | |
| 40 | - | |
| 41 | - // Grab the image coder | |
| 42 | - id<SDImageCoder> imageCoder; | |
| 43 | - if ([context[SDWebImageContextImageCoder] conformsToProtocol:@protocol(SDImageCoder)]) { | |
| 44 | - imageCoder = context[SDWebImageContextImageCoder]; | |
| 45 | - } else { | |
| 46 | - imageCoder = [SDImageCodersManager sharedManager]; | |
| 21 | + SDImageCoderOptions *coderOptions = @{SDImageCoderDecodeFirstFrameOnly : @(decodeFirstFrame), SDImageCoderDecodeScaleFactor : @(scale)}; | |
| 22 | + if (context) { | |
| 23 | + SDImageCoderMutableOptions *mutableCoderOptions = [coderOptions mutableCopy]; | |
| 24 | + [mutableCoderOptions setValue:context forKey:SDImageCoderWebImageContext]; | |
| 25 | + coderOptions = [mutableCoderOptions copy]; | |
| 47 | 26 | } |
| 48 | 27 | |
| 49 | 28 | if (!decodeFirstFrame) { |
| ... | ... | @@ -65,7 +44,7 @@ UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSS |
| 65 | 44 | } |
| 66 | 45 | } |
| 67 | 46 | if (!image) { |
| 68 | - image = [imageCoder decodedImageWithData:imageData options:coderOptions]; | |
| 47 | + image = [[SDImageCodersManager sharedManager] decodedImageWithData:imageData options:coderOptions]; | |
| 69 | 48 | } |
| 70 | 49 | if (image) { |
| 71 | 50 | BOOL shouldDecode = !SD_OPTIONS_CONTAINS(options, SDWebImageAvoidDecodeImage); |
| ... | ... | @@ -77,7 +56,12 @@ UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSS |
| 77 | 56 | shouldDecode = NO; |
| 78 | 57 | } |
| 79 | 58 | if (shouldDecode) { |
| 80 | - image = [SDImageCoderHelper decodedImageWithImage:image]; | |
| 59 | + BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); | |
| 60 | + if (shouldScaleDown) { | |
| 61 | + image = [SDImageCoderHelper decodedAndScaledDownImageWithImage:image limitBytes:0]; | |
| 62 | + } else { | |
| 63 | + image = [SDImageCoderHelper decodedImageWithImage:image]; | |
| 64 | + } | |
| 81 | 65 | } |
| 82 | 66 | } |
| 83 | 67 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.m
| ... | ... | @@ -85,10 +85,6 @@ |
| 85 | 85 | #pragma mark - SDImageCache |
| 86 | 86 | |
| 87 | 87 | - (id<SDWebImageOperation>)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context completion:(SDImageCacheQueryCompletionBlock)completionBlock { |
| 88 | - return [self queryImageForKey:key options:options context:context cacheType:SDImageCacheTypeAll completion:completionBlock]; | |
| 89 | -} | |
| 90 | - | |
| 91 | -- (id<SDWebImageOperation>)queryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(SDImageCacheQueryCompletionBlock)completionBlock { | |
| 92 | 88 | if (!key) { |
| 93 | 89 | return nil; |
| 94 | 90 | } |
| ... | ... | @@ -97,30 +93,30 @@ |
| 97 | 93 | if (count == 0) { |
| 98 | 94 | return nil; |
| 99 | 95 | } else if (count == 1) { |
| 100 | - return [caches.firstObject queryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock]; | |
| 96 | + return [caches.firstObject queryImageForKey:key options:options context:context completion:completionBlock]; | |
| 101 | 97 | } |
| 102 | 98 | switch (self.queryOperationPolicy) { |
| 103 | 99 | case SDImageCachesManagerOperationPolicyHighestOnly: { |
| 104 | 100 | id<SDImageCache> cache = caches.lastObject; |
| 105 | - return [cache queryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock]; | |
| 101 | + return [cache queryImageForKey:key options:options context:context completion:completionBlock]; | |
| 106 | 102 | } |
| 107 | 103 | break; |
| 108 | 104 | case SDImageCachesManagerOperationPolicyLowestOnly: { |
| 109 | 105 | id<SDImageCache> cache = caches.firstObject; |
| 110 | - return [cache queryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock]; | |
| 106 | + return [cache queryImageForKey:key options:options context:context completion:completionBlock]; | |
| 111 | 107 | } |
| 112 | 108 | break; |
| 113 | 109 | case SDImageCachesManagerOperationPolicyConcurrent: { |
| 114 | 110 | SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; |
| 115 | 111 | [operation beginWithTotalCount:caches.count]; |
| 116 | - [self concurrentQueryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; | |
| 112 | + [self concurrentQueryImageForKey:key options:options context:context completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; | |
| 117 | 113 | return operation; |
| 118 | 114 | } |
| 119 | 115 | break; |
| 120 | 116 | case SDImageCachesManagerOperationPolicySerial: { |
| 121 | 117 | SDImageCachesManagerOperation *operation = [SDImageCachesManagerOperation new]; |
| 122 | 118 | [operation beginWithTotalCount:caches.count]; |
| 123 | - [self serialQueryImageForKey:key options:options context:context cacheType:cacheType completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; | |
| 119 | + [self serialQueryImageForKey:key options:options context:context completion:completionBlock enumerator:caches.reverseObjectEnumerator operation:operation]; | |
| 124 | 120 | return operation; |
| 125 | 121 | } |
| 126 | 122 | break; |
| ... | ... | @@ -283,11 +279,11 @@ |
| 283 | 279 | |
| 284 | 280 | #pragma mark - Concurrent Operation |
| 285 | 281 | |
| 286 | -- (void)concurrentQueryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType completion:(SDImageCacheQueryCompletionBlock)completionBlock enumerator:(NSEnumerator<id<SDImageCache>> *)enumerator operation:(SDImageCachesManagerOperation *)operation { | |
| 282 | +- (void)concurrentQueryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context completion:(SDImageCacheQueryCompletionBlock)completionBlock enumerator:(NSEnumerator<id<SDImageCache>> *)enumerator operation:(SDImageCachesManagerOperation *)operation { | |
| 287 | 283 | NSParameterAssert(enumerator); |
| 288 | 284 | NSParameterAssert(operation); |
| 289 | 285 | for (id<SDImageCache> cache in enumerator) { |
| 290 | - [cache queryImageForKey:key options:options context:context cacheType:queryCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { | |
| 286 | + [cache queryImageForKey:key options:options context:context completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { | |
| 291 | 287 | if (operation.isCancelled) { |
| 292 | 288 | // Cancelled |
| 293 | 289 | return; |
| ... | ... | @@ -426,7 +422,7 @@ |
| 426 | 422 | |
| 427 | 423 | #pragma mark - Serial Operation |
| 428 | 424 | |
| 429 | -- (void)serialQueryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType completion:(SDImageCacheQueryCompletionBlock)completionBlock enumerator:(NSEnumerator<id<SDImageCache>> *)enumerator operation:(SDImageCachesManagerOperation *)operation { | |
| 425 | +- (void)serialQueryImageForKey:(NSString *)key options:(SDWebImageOptions)options context:(SDWebImageContext *)context completion:(SDImageCacheQueryCompletionBlock)completionBlock enumerator:(NSEnumerator<id<SDImageCache>> *)enumerator operation:(SDImageCachesManagerOperation *)operation { | |
| 430 | 426 | NSParameterAssert(enumerator); |
| 431 | 427 | NSParameterAssert(operation); |
| 432 | 428 | id<SDImageCache> cache = enumerator.nextObject; |
| ... | ... | @@ -439,7 +435,7 @@ |
| 439 | 435 | return; |
| 440 | 436 | } |
| 441 | 437 | @weakify(self); |
| 442 | - [cache queryImageForKey:key options:options context:context cacheType:queryCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { | |
| 438 | + [cache queryImageForKey:key options:options context:context completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { | |
| 443 | 439 | @strongify(self); |
| 444 | 440 | if (operation.isCancelled) { |
| 445 | 441 | // Cancelled |
| ... | ... | @@ -459,7 +455,7 @@ |
| 459 | 455 | return; |
| 460 | 456 | } |
| 461 | 457 | // Next |
| 462 | - [self serialQueryImageForKey:key options:options context:context cacheType:queryCacheType completion:completionBlock enumerator:enumerator operation:operation]; | |
| 458 | + [self serialQueryImageForKey:key options:options context:context completion:completionBlock enumerator:enumerator operation:operation]; | |
| 463 | 459 | }]; |
| 464 | 460 | } |
| 465 | 461 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h
| ... | ... | @@ -21,30 +21,12 @@ typedef NSMutableDictionary<SDImageCoderOption, id> SDImageCoderMutableOptions; |
| 21 | 21 | @note works for `SDImageCoder`. |
| 22 | 22 | */ |
| 23 | 23 | FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeFirstFrameOnly; |
| 24 | - | |
| 25 | 24 | /** |
| 26 | 25 | A CGFloat value which is greater than or equal to 1.0. This value specify the image scale factor for decoding. If not provide, use 1.0. (NSNumber) |
| 27 | 26 | @note works for `SDImageCoder`, `SDProgressiveImageCoder`, `SDAnimatedImageCoder`. |
| 28 | 27 | */ |
| 29 | 28 | FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeScaleFactor; |
| 30 | 29 | |
| 31 | -/** | |
| 32 | - A Boolean value indicating whether to keep the original aspect ratio when generating thumbnail images (or bitmap images from vector format). | |
| 33 | - Defaults to YES. | |
| 34 | - @note works for `SDImageCoder`, `SDProgressiveImageCoder`, `SDAnimatedImageCoder`. | |
| 35 | - */ | |
| 36 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodePreserveAspectRatio; | |
| 37 | - | |
| 38 | -/** | |
| 39 | - A CGSize value indicating whether or not to generate the thumbnail images (or bitmap images from vector format). When this value is provided, the decoder will generate a thumbnail image which pixel size is smaller than or equal to (depends the `.preserveAspectRatio`) the value size. | |
| 40 | - Defaults to CGSizeZero, which means no thumbnail generation at all. | |
| 41 | - @note Supports for animated image as well. | |
| 42 | - @note When you pass `.preserveAspectRatio == NO`, the thumbnail image is stretched to match each dimension. When `.preserveAspectRatio == YES`, the thumbnail image's width is limited to pixel size's width, the thumbnail image's height is limited to pixel size's height. For common cases, you can just pass a square size to limit both. | |
| 43 | - @note works for `SDImageCoder`, `SDProgressiveImageCoder`, `SDAnimatedImageCoder`. | |
| 44 | - */ | |
| 45 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeThumbnailPixelSize; | |
| 46 | - | |
| 47 | - | |
| 48 | 30 | // These options are for image encoding |
| 49 | 31 | /** |
| 50 | 32 | A Boolean value indicating whether to encode the first frame only for animated image during encoding. (NSNumber). If not provide, encode animated image if need. |
| ... | ... | @@ -58,42 +40,12 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeFirstFrame |
| 58 | 40 | FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeCompressionQuality; |
| 59 | 41 | |
| 60 | 42 | /** |
| 61 | - A UIColor(NSColor) value to used for non-alpha image encoding when the input image has alpha channel, the background color will be used to compose the alpha one. If not provide, use white color. | |
| 62 | - @note works for `SDImageCoder` | |
| 63 | - */ | |
| 64 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeBackgroundColor; | |
| 65 | - | |
| 66 | -/** | |
| 67 | - A CGSize value indicating the max image resolution in pixels during encoding. For vector image, this also effect the output vector data information about width and height. The encoder will not generate the encoded image larger than this limit. Note it always use the aspect ratio of input image.. | |
| 68 | - Defaults to CGSizeZero, which means no max size limit at all. | |
| 69 | - @note Supports for animated image as well. | |
| 70 | - @note The output image's width is limited to pixel size's width, the output image's height is limited to pixel size's height. For common cases, you can just pass a square size to limit both. | |
| 71 | - @note works for `SDImageCoder` | |
| 72 | - */ | |
| 73 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeMaxPixelSize; | |
| 74 | - | |
| 75 | -/** | |
| 76 | - A NSUInteger value specify the max output data bytes size after encoding. Some lossy format like JPEG/HEIF supports the hint for codec to automatically reduce the quality and match the file size you want. Note this option will override the `SDImageCoderEncodeCompressionQuality`, because now the quality is decided by the encoder. (NSNumber) | |
| 77 | - @note This is a hint, no guarantee for output size because of compression algorithm limit. And this options does not works for vector images. | |
| 78 | - @note works for `SDImageCoder` | |
| 79 | - */ | |
| 80 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeMaxFileSize; | |
| 81 | - | |
| 82 | -/** | |
| 83 | - A Boolean value indicating the encoding format should contains a thumbnail image into the output data. Only some of image format (like JPEG/HEIF/AVIF) support this behavior. The embed thumbnail will be used during next time thumbnail decoding (provided `.thumbnailPixelSize`), which is faster than full image thumbnail decoding. (NSNumber) | |
| 84 | - Defaults to NO, which does not embed any thumbnail. | |
| 85 | - @note The thumbnail image's pixel size is not defined, the encoder can choose the proper pixel size which is suitable for encoding quality. | |
| 86 | - @note works for `SDImageCoder` | |
| 87 | - */ | |
| 88 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderEncodeEmbedThumbnail; | |
| 89 | - | |
| 90 | -/** | |
| 91 | 43 | A SDWebImageContext object which hold the original context options from top-level API. (SDWebImageContext) |
| 92 | 44 | This option is ignored for all built-in coders and take no effect. |
| 93 | - But this may be useful for some custom coders, because some business logic may dependent on things other than image or image data information only. | |
| 45 | + But this may be useful for some custom coders, because some business logic may dependent on things other than image or image data inforamtion only. | |
| 94 | 46 | See `SDWebImageContext` for more detailed information. |
| 95 | 47 | */ |
| 96 | -FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext API_DEPRECATED("The coder component will be seperated from Core subspec in the future. Update your code to not rely on this context option.", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED));; | |
| 48 | +FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext; | |
| 97 | 49 | |
| 98 | 50 | #pragma mark - Coder |
| 99 | 51 | /** | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m
| ... | ... | @@ -10,14 +10,8 @@ |
| 10 | 10 | |
| 11 | 11 | SDImageCoderOption const SDImageCoderDecodeFirstFrameOnly = @"decodeFirstFrameOnly"; |
| 12 | 12 | SDImageCoderOption const SDImageCoderDecodeScaleFactor = @"decodeScaleFactor"; |
| 13 | -SDImageCoderOption const SDImageCoderDecodePreserveAspectRatio = @"decodePreserveAspectRatio"; | |
| 14 | -SDImageCoderOption const SDImageCoderDecodeThumbnailPixelSize = @"decodeThumbnailPixelSize"; | |
| 15 | 13 | |
| 16 | 14 | SDImageCoderOption const SDImageCoderEncodeFirstFrameOnly = @"encodeFirstFrameOnly"; |
| 17 | 15 | SDImageCoderOption const SDImageCoderEncodeCompressionQuality = @"encodeCompressionQuality"; |
| 18 | -SDImageCoderOption const SDImageCoderEncodeBackgroundColor = @"encodeBackgroundColor"; | |
| 19 | -SDImageCoderOption const SDImageCoderEncodeMaxPixelSize = @"encodeMaxPixelSize"; | |
| 20 | -SDImageCoderOption const SDImageCoderEncodeMaxFileSize = @"encodeMaxFileSize"; | |
| 21 | -SDImageCoderOption const SDImageCoderEncodeEmbedThumbnail = @"encodeEmbedThumbnail"; | |
| 22 | 16 | |
| 23 | 17 | SDImageCoderOption const SDImageCoderWebImageContext = @"webImageContext"; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h
| ... | ... | @@ -74,16 +74,6 @@ |
| 74 | 74 | + (CGImageRef _Nullable)CGImageCreateDecoded:(_Nonnull CGImageRef)cgImage orientation:(CGImagePropertyOrientation)orientation CF_RETURNS_RETAINED; |
| 75 | 75 | |
| 76 | 76 | /** |
| 77 | - Create a scaled CGImage by the provided CGImage and size. This follows The Create Rule and you are response to call release after usage. | |
| 78 | - It will detect whether the image size matching the scale size, if not, stretch the image to the target size. | |
| 79 | - | |
| 80 | - @param cgImage The CGImage | |
| 81 | - @param size The scale size in pixel. | |
| 82 | - @return A new created scaled image | |
| 83 | - */ | |
| 84 | -+ (CGImageRef _Nullable)CGImageCreateScaled:(_Nonnull CGImageRef)cgImage size:(CGSize)size CF_RETURNS_RETAINED; | |
| 85 | - | |
| 86 | -/** | |
| 87 | 77 | Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image |
| 88 | 78 | @param image The image to be decoded |
| 89 | 79 | @return The decoded image |
| ... | ... | @@ -99,12 +89,6 @@ |
| 99 | 89 | */ |
| 100 | 90 | + (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes; |
| 101 | 91 | |
| 102 | -/** | |
| 103 | - Control the default limit bytes to scale down largest images. | |
| 104 | - This value must be larger than or equal to 1MB. Defaults to 60MB on iOS/tvOS, 90MB on macOS, 30MB on watchOS. | |
| 105 | - */ | |
| 106 | -@property (class, readwrite) NSUInteger defaultScaleDownLimitBytes; | |
| 107 | - | |
| 108 | 92 | #if SD_UIKIT || SD_WATCH |
| 109 | 93 | /** |
| 110 | 94 | Convert an EXIF image orientation to an iOS one. | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m
| ... | ... | @@ -12,35 +12,35 @@ |
| 12 | 12 | #import "NSData+ImageContentType.h" |
| 13 | 13 | #import "SDAnimatedImageRep.h" |
| 14 | 14 | #import "UIImage+ForceDecode.h" |
| 15 | -#import "SDAssociatedObject.h" | |
| 16 | 15 | #import "UIImage+Metadata.h" |
| 17 | -#import "SDInternalMacros.h" | |
| 18 | -#import <Accelerate/Accelerate.h> | |
| 19 | - | |
| 20 | -static inline size_t SDByteAlign(size_t size, size_t alignment) { | |
| 21 | - return ((size + (alignment - 1)) / alignment) * alignment; | |
| 22 | -} | |
| 23 | 16 | |
| 17 | +#if SD_UIKIT || SD_WATCH | |
| 24 | 18 | static const size_t kBytesPerPixel = 4; |
| 25 | 19 | static const size_t kBitsPerComponent = 8; |
| 26 | 20 | |
| 27 | -static const CGFloat kBytesPerMB = 1024.0f * 1024.0f; | |
| 28 | -static const CGFloat kPixelsPerMB = kBytesPerMB / kBytesPerPixel; | |
| 29 | 21 | /* |
| 30 | 22 | * Defines the maximum size in MB of the decoded image when the flag `SDWebImageScaleDownLargeImages` is set |
| 31 | 23 | * Suggested value for iPad1 and iPhone 3GS: 60. |
| 32 | 24 | * Suggested value for iPad2 and iPhone 4: 120. |
| 33 | 25 | * Suggested value for iPhone 3G and iPod 2 and earlier devices: 30. |
| 34 | 26 | */ |
| 35 | -#if SD_MAC | |
| 36 | -static CGFloat kDestImageLimitBytes = 90.f * kBytesPerMB; | |
| 37 | -#elif SD_UIKIT | |
| 38 | -static CGFloat kDestImageLimitBytes = 60.f * kBytesPerMB; | |
| 39 | -#elif SD_WATCH | |
| 40 | -static CGFloat kDestImageLimitBytes = 30.f * kBytesPerMB; | |
| 41 | -#endif | |
| 27 | +static const CGFloat kDestImageSizeMB = 60.f; | |
| 28 | + | |
| 29 | +/* | |
| 30 | + * Defines the maximum size in MB of a tile used to decode image when the flag `SDWebImageScaleDownLargeImages` is set | |
| 31 | + * Suggested value for iPad1 and iPhone 3GS: 20. | |
| 32 | + * Suggested value for iPad2 and iPhone 4: 40. | |
| 33 | + * Suggested value for iPhone 3G and iPod 2 and earlier devices: 10. | |
| 34 | + */ | |
| 35 | +static const CGFloat kSourceImageTileSizeMB = 20.f; | |
| 36 | + | |
| 37 | +static const CGFloat kBytesPerMB = 1024.0f * 1024.0f; | |
| 38 | +static const CGFloat kPixelsPerMB = kBytesPerMB / kBytesPerPixel; | |
| 39 | +static const CGFloat kDestTotalPixels = kDestImageSizeMB * kPixelsPerMB; | |
| 40 | +static const CGFloat kTileTotalPixels = kSourceImageTileSizeMB * kPixelsPerMB; | |
| 42 | 41 | |
| 43 | 42 | static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to overlap the seems where tiles meet. |
| 43 | +#endif | |
| 44 | 44 | |
| 45 | 45 | @implementation SDImageCoderHelper |
| 46 | 46 | |
| ... | ... | @@ -277,57 +277,10 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 277 | 277 | return newImageRef; |
| 278 | 278 | } |
| 279 | 279 | |
| 280 | -+ (CGImageRef)CGImageCreateScaled:(CGImageRef)cgImage size:(CGSize)size { | |
| 281 | - if (!cgImage) { | |
| 282 | - return NULL; | |
| 283 | - } | |
| 284 | - size_t width = CGImageGetWidth(cgImage); | |
| 285 | - size_t height = CGImageGetHeight(cgImage); | |
| 286 | - if (width == size.width && height == size.height) { | |
| 287 | - CGImageRetain(cgImage); | |
| 288 | - return cgImage; | |
| 289 | - } | |
| 290 | - | |
| 291 | - __block vImage_Buffer input_buffer = {}, output_buffer = {}; | |
| 292 | - @onExit { | |
| 293 | - if (input_buffer.data) free(input_buffer.data); | |
| 294 | - if (output_buffer.data) free(output_buffer.data); | |
| 295 | - }; | |
| 296 | - BOOL hasAlpha = [self CGImageContainsAlpha:cgImage]; | |
| 297 | - // iOS display alpha info (BGRA8888/BGRX8888) | |
| 298 | - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; | |
| 299 | - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; | |
| 300 | - vImage_CGImageFormat format = (vImage_CGImageFormat) { | |
| 301 | - .bitsPerComponent = 8, | |
| 302 | - .bitsPerPixel = 32, | |
| 303 | - .colorSpace = NULL, | |
| 304 | - .bitmapInfo = bitmapInfo, | |
| 305 | - .version = 0, | |
| 306 | - .decode = NULL, | |
| 307 | - .renderingIntent = kCGRenderingIntentDefault, | |
| 308 | - }; | |
| 309 | - | |
| 310 | - vImage_Error a_ret = vImageBuffer_InitWithCGImage(&input_buffer, &format, NULL, cgImage, kvImageNoFlags); | |
| 311 | - if (a_ret != kvImageNoError) return NULL; | |
| 312 | - output_buffer.width = MAX(size.width, 0); | |
| 313 | - output_buffer.height = MAX(size.height, 0); | |
| 314 | - output_buffer.rowBytes = SDByteAlign(output_buffer.width * 4, 64); | |
| 315 | - output_buffer.data = malloc(output_buffer.rowBytes * output_buffer.height); | |
| 316 | - if (!output_buffer.data) return NULL; | |
| 317 | - | |
| 318 | - vImage_Error ret = vImageScale_ARGB8888(&input_buffer, &output_buffer, NULL, kvImageHighQualityResampling); | |
| 319 | - if (ret != kvImageNoError) return NULL; | |
| 320 | - | |
| 321 | - CGImageRef outputImage = vImageCreateCGImageFromBuffer(&output_buffer, &format, NULL, NULL, kvImageNoFlags, &ret); | |
| 322 | - if (ret != kvImageNoError) { | |
| 323 | - CGImageRelease(outputImage); | |
| 324 | - return NULL; | |
| 325 | - } | |
| 326 | - | |
| 327 | - return outputImage; | |
| 328 | -} | |
| 329 | - | |
| 330 | 280 | + (UIImage *)decodedImageWithImage:(UIImage *)image { |
| 281 | +#if SD_MAC | |
| 282 | + return image; | |
| 283 | +#else | |
| 331 | 284 | if (![self shouldDecodeImage:image]) { |
| 332 | 285 | return image; |
| 333 | 286 | } |
| ... | ... | @@ -336,18 +289,18 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 336 | 289 | if (!imageRef) { |
| 337 | 290 | return image; |
| 338 | 291 | } |
| 339 | -#if SD_MAC | |
| 340 | - UIImage *decodedImage = [[UIImage alloc] initWithCGImage:imageRef scale:image.scale orientation:kCGImagePropertyOrientationUp]; | |
| 341 | -#else | |
| 342 | 292 | UIImage *decodedImage = [[UIImage alloc] initWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation]; |
| 343 | -#endif | |
| 344 | 293 | CGImageRelease(imageRef); |
| 345 | - SDImageCopyAssociatedObject(image, decodedImage); | |
| 346 | 294 | decodedImage.sd_isDecoded = YES; |
| 295 | + decodedImage.sd_imageFormat = image.sd_imageFormat; | |
| 347 | 296 | return decodedImage; |
| 297 | +#endif | |
| 348 | 298 | } |
| 349 | 299 | |
| 350 | 300 | + (UIImage *)decodedAndScaledDownImageWithImage:(UIImage *)image limitBytes:(NSUInteger)bytes { |
| 301 | +#if SD_MAC | |
| 302 | + return image; | |
| 303 | +#else | |
| 351 | 304 | if (![self shouldDecodeImage:image]) { |
| 352 | 305 | return image; |
| 353 | 306 | } |
| ... | ... | @@ -358,11 +311,13 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 358 | 311 | |
| 359 | 312 | CGFloat destTotalPixels; |
| 360 | 313 | CGFloat tileTotalPixels; |
| 361 | - if (bytes == 0) { | |
| 362 | - bytes = kDestImageLimitBytes; | |
| 314 | + if (bytes > 0) { | |
| 315 | + destTotalPixels = bytes / kBytesPerPixel; | |
| 316 | + tileTotalPixels = destTotalPixels / 3; | |
| 317 | + } else { | |
| 318 | + destTotalPixels = kDestTotalPixels; | |
| 319 | + tileTotalPixels = kTileTotalPixels; | |
| 363 | 320 | } |
| 364 | - destTotalPixels = bytes / kBytesPerPixel; | |
| 365 | - tileTotalPixels = destTotalPixels / 3; | |
| 366 | 321 | CGContextRef destContext; |
| 367 | 322 | |
| 368 | 323 | // autorelease the bitmap context and all vars to help system to free memory when there are memory warning. |
| ... | ... | @@ -406,13 +361,13 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 406 | 361 | CGContextSetInterpolationQuality(destContext, kCGInterpolationHigh); |
| 407 | 362 | |
| 408 | 363 | // Now define the size of the rectangle to be used for the |
| 409 | - // incremental bits from the input image to the output image. | |
| 364 | + // incremental blits from the input image to the output image. | |
| 410 | 365 | // we use a source tile width equal to the width of the source |
| 411 | 366 | // image due to the way that iOS retrieves image data from disk. |
| 412 | 367 | // iOS must decode an image from disk in full width 'bands', even |
| 413 | 368 | // if current graphics context is clipped to a subrect within that |
| 414 | 369 | // band. Therefore we fully utilize all of the pixel data that results |
| 415 | - // from a decoding operation by anchoring our tile size to the full | |
| 370 | + // from a decoding opertion by achnoring our tile size to the full | |
| 416 | 371 | // width of the input image. |
| 417 | 372 | CGRect sourceTile = CGRectZero; |
| 418 | 373 | sourceTile.size.width = sourceResolution.width; |
| ... | ... | @@ -428,7 +383,7 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 428 | 383 | destTile.size.height = sourceTile.size.height * imageScale; |
| 429 | 384 | destTile.origin.x = 0.0f; |
| 430 | 385 | // The source seem overlap is proportionate to the destination seem overlap. |
| 431 | - // this is the amount of pixels to overlap each tile as we assemble the output image. | |
| 386 | + // this is the amount of pixels to overlap each tile as we assemble the ouput image. | |
| 432 | 387 | float sourceSeemOverlap = (int)((kDestSeemOverlap/destResolution.height)*sourceResolution.height); |
| 433 | 388 | CGImageRef sourceTileImageRef; |
| 434 | 389 | // calculate the number of read/write operations required to assemble the |
| ... | ... | @@ -465,30 +420,16 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 465 | 420 | if (destImageRef == NULL) { |
| 466 | 421 | return image; |
| 467 | 422 | } |
| 468 | -#if SD_MAC | |
| 469 | - UIImage *destImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:kCGImagePropertyOrientationUp]; | |
| 470 | -#else | |
| 471 | 423 | UIImage *destImage = [[UIImage alloc] initWithCGImage:destImageRef scale:image.scale orientation:image.imageOrientation]; |
| 472 | -#endif | |
| 473 | 424 | CGImageRelease(destImageRef); |
| 474 | 425 | if (destImage == nil) { |
| 475 | 426 | return image; |
| 476 | 427 | } |
| 477 | - SDImageCopyAssociatedObject(image, destImage); | |
| 478 | 428 | destImage.sd_isDecoded = YES; |
| 429 | + destImage.sd_imageFormat = image.sd_imageFormat; | |
| 479 | 430 | return destImage; |
| 480 | 431 | } |
| 481 | -} | |
| 482 | - | |
| 483 | -+ (NSUInteger)defaultScaleDownLimitBytes { | |
| 484 | - return kDestImageLimitBytes; | |
| 485 | -} | |
| 486 | - | |
| 487 | -+ (void)setDefaultScaleDownLimitBytes:(NSUInteger)defaultScaleDownLimitBytes { | |
| 488 | - if (defaultScaleDownLimitBytes < kBytesPerMB) { | |
| 489 | - return; | |
| 490 | - } | |
| 491 | - kDestImageLimitBytes = defaultScaleDownLimitBytes; | |
| 432 | +#endif | |
| 492 | 433 | } |
| 493 | 434 | |
| 494 | 435 | #if SD_UIKIT || SD_WATCH |
| ... | ... | @@ -561,22 +502,19 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 561 | 502 | } |
| 562 | 503 | #endif |
| 563 | 504 | |
| 564 | -#pragma mark - Helper Function | |
| 505 | +#pragma mark - Helper Fuction | |
| 506 | +#if SD_UIKIT || SD_WATCH | |
| 565 | 507 | + (BOOL)shouldDecodeImage:(nullable UIImage *)image { |
| 566 | - // Prevent "CGBitmapContextCreateImage: invalid context 0x0" error | |
| 567 | - if (image == nil) { | |
| 568 | - return NO; | |
| 569 | - } | |
| 570 | 508 | // Avoid extra decode |
| 571 | 509 | if (image.sd_isDecoded) { |
| 572 | 510 | return NO; |
| 573 | 511 | } |
| 574 | - // do not decode animated images | |
| 575 | - if (image.sd_isAnimated) { | |
| 512 | + // Prevent "CGBitmapContextCreateImage: invalid context 0x0" error | |
| 513 | + if (image == nil) { | |
| 576 | 514 | return NO; |
| 577 | 515 | } |
| 578 | - // do not decode vector images | |
| 579 | - if (image.sd_isVector) { | |
| 516 | + // do not decode animated images | |
| 517 | + if (image.images != nil) { | |
| 580 | 518 | return NO; |
| 581 | 519 | } |
| 582 | 520 | |
| ... | ... | @@ -595,10 +533,11 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 595 | 533 | return NO; |
| 596 | 534 | } |
| 597 | 535 | CGFloat destTotalPixels; |
| 598 | - if (bytes == 0) { | |
| 599 | - bytes = kDestImageLimitBytes; | |
| 536 | + if (bytes > 0) { | |
| 537 | + destTotalPixels = bytes / kBytesPerPixel; | |
| 538 | + } else { | |
| 539 | + destTotalPixels = kDestTotalPixels; | |
| 600 | 540 | } |
| 601 | - destTotalPixels = bytes / kBytesPerPixel; | |
| 602 | 541 | if (destTotalPixels <= kPixelsPerMB) { |
| 603 | 542 | // Too small to scale down |
| 604 | 543 | return NO; |
| ... | ... | @@ -612,6 +551,7 @@ static const CGFloat kDestSeemOverlap = 2.0f; // the numbers of pixels to over |
| 612 | 551 | |
| 613 | 552 | return shouldScaleDown; |
| 614 | 553 | } |
| 554 | +#endif | |
| 615 | 555 | |
| 616 | 556 | static inline CGAffineTransform SDCGContextTransformFromOrientation(CGImagePropertyOrientation orientation, CGSize size) { |
| 617 | 557 | // Inspiration from @libfeihu | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h
| ... | ... | @@ -13,7 +13,6 @@ |
| 13 | 13 | These following graphics context method are provided to easily write cross-platform(AppKit/UIKit) code. |
| 14 | 14 | For UIKit, these methods just call the same method in `UIGraphics.h`. See the documentation for usage. |
| 15 | 15 | For AppKit, these methods use `NSGraphicsContext` to create image context and match the behavior like UIKit. |
| 16 | - @note If you don't care bitmap format (ARGB8888) and just draw image, use `SDGraphicsImageRenderer` instead. It's more performant on RAM usage.` | |
| 17 | 16 | */ |
| 18 | 17 | |
| 19 | 18 | /// Returns the current graphics context. | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.m
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | #import "SDImageHEICCoder.h" |
| 10 | 10 | #import "SDImageHEICCoderInternal.h" |
| 11 | 11 | |
| 12 | -// These constants are available from iOS 13+ and Xcode 11. This raw value is used for toolchain and firmware compatibility | |
| 12 | +// These constantce are available from iOS 13+ and Xcode 11. This raw value is used for toolchain and firmware compatiblitiy | |
| 13 | 13 | static NSString * kSDCGImagePropertyHEICSDictionary = @"{HEICS}"; |
| 14 | 14 | static NSString * kSDCGImagePropertyHEICSLoopCount = @"LoopCount"; |
| 15 | 15 | static NSString * kSDCGImagePropertyHEICSDelayTime = @"DelayTime"; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h
| ... | ... | @@ -12,7 +12,7 @@ |
| 12 | 12 | |
| 13 | 13 | /** |
| 14 | 14 | This is the abstract class for all animated coder, which use the Image/IO API. You can not use this directly as real coders. A exception will be raised if you use this class. |
| 15 | - All of the properties need the subclass to implement and works as expected. | |
| 15 | + All of the properties need the subclass to implment and works as expceted. | |
| 16 | 16 | For Image/IO, See Apple's documentation: https://developer.apple.com/documentation/imageio |
| 17 | 17 | */ |
| 18 | 18 | @interface SDImageIOAnimatedCoder : NSObject <SDProgressiveImageCoder, SDAnimatedImageCoder> |
| ... | ... | @@ -35,7 +35,7 @@ |
| 35 | 35 | */ |
| 36 | 36 | @property (class, readonly, nonnull) NSString *dictionaryProperty; |
| 37 | 37 | /** |
| 38 | - The image unclamped delay time property key used in Image/IO API. Such as `kCGImagePropertyGIFUnclampedDelayTime` | |
| 38 | + The image unclamped deply time property key used in Image/IO API. Such as `kCGImagePropertyGIFUnclampedDelayTime` | |
| 39 | 39 | @note Subclass override. |
| 40 | 40 | */ |
| 41 | 41 | @property (class, readonly, nonnull) NSString *unclampedDelayTimeProperty; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m
| ... | ... | @@ -12,12 +12,6 @@ |
| 12 | 12 | #import "NSData+ImageContentType.h" |
| 13 | 13 | #import "SDImageCoderHelper.h" |
| 14 | 14 | #import "SDAnimatedImageRep.h" |
| 15 | -#import "UIImage+ForceDecode.h" | |
| 16 | - | |
| 17 | -// Specify DPI for vector format in CGImageSource, like PDF | |
| 18 | -static NSString * kSDCGImageSourceRasterizationDPI = @"kCGImageSourceRasterizationDPI"; | |
| 19 | -// Specify File Size for lossy format encoding, like JPEG | |
| 20 | -static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestinationRequestedFileSize"; | |
| 21 | 15 | |
| 22 | 16 | @interface SDImageIOCoderFrame : NSObject |
| 23 | 17 | |
| ... | ... | @@ -38,8 +32,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 38 | 32 | NSUInteger _frameCount; |
| 39 | 33 | NSArray<SDImageIOCoderFrame *> *_frames; |
| 40 | 34 | BOOL _finished; |
| 41 | - BOOL _preserveAspectRatio; | |
| 42 | - CGSize _thumbnailSize; | |
| 43 | 35 | } |
| 44 | 36 | |
| 45 | 37 | - (void)dealloc |
| ... | ... | @@ -110,7 +102,7 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 110 | 102 | |
| 111 | 103 | + (NSUInteger)imageLoopCountWithSource:(CGImageSourceRef)source { |
| 112 | 104 | NSUInteger loopCount = self.defaultLoopCount; |
| 113 | - NSDictionary *imageProperties = (__bridge_transfer NSDictionary *)CGImageSourceCopyProperties(source, NULL); | |
| 105 | + NSDictionary *imageProperties = (__bridge_transfer NSDictionary *)CGImageSourceCopyProperties(source, nil); | |
| 114 | 106 | NSDictionary *containerProperties = imageProperties[self.dictionaryProperty]; |
| 115 | 107 | if (containerProperties) { |
| 116 | 108 | NSNumber *containerLoopCount = containerProperties[self.loopCountProperty]; |
| ... | ... | @@ -122,12 +114,8 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 122 | 114 | } |
| 123 | 115 | |
| 124 | 116 | + (NSTimeInterval)frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source { |
| 125 | - NSDictionary *options = @{ | |
| 126 | - (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @(YES), | |
| 127 | - (__bridge NSString *)kCGImageSourceShouldCache : @(YES) // Always cache to reduce CPU usage | |
| 128 | - }; | |
| 129 | 117 | NSTimeInterval frameDuration = 0.1; |
| 130 | - CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, (__bridge CFDictionaryRef)options); | |
| 118 | + CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil); | |
| 131 | 119 | if (!cfFrameProperties) { |
| 132 | 120 | return frameDuration; |
| 133 | 121 | } |
| ... | ... | @@ -157,93 +145,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 157 | 145 | return frameDuration; |
| 158 | 146 | } |
| 159 | 147 | |
| 160 | -+ (UIImage *)createFrameAtIndex:(NSUInteger)index source:(CGImageSourceRef)source scale:(CGFloat)scale preserveAspectRatio:(BOOL)preserveAspectRatio thumbnailSize:(CGSize)thumbnailSize options:(NSDictionary *)options { | |
| 161 | - // Some options need to pass to `CGImageSourceCopyPropertiesAtIndex` before `CGImageSourceCreateImageAtIndex`, or ImageIO will ignore them because they parse once :) | |
| 162 | - // Parse the image properties | |
| 163 | - NSDictionary *properties = (__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, index, (__bridge CFDictionaryRef)options); | |
| 164 | - NSUInteger pixelWidth = [properties[(__bridge NSString *)kCGImagePropertyPixelWidth] unsignedIntegerValue]; | |
| 165 | - NSUInteger pixelHeight = [properties[(__bridge NSString *)kCGImagePropertyPixelHeight] unsignedIntegerValue]; | |
| 166 | - CGImagePropertyOrientation exifOrientation = (CGImagePropertyOrientation)[properties[(__bridge NSString *)kCGImagePropertyOrientation] unsignedIntegerValue]; | |
| 167 | - if (!exifOrientation) { | |
| 168 | - exifOrientation = kCGImagePropertyOrientationUp; | |
| 169 | - } | |
| 170 | - | |
| 171 | - CFStringRef uttype = CGImageSourceGetType(source); | |
| 172 | - // Check vector format | |
| 173 | - BOOL isVector = NO; | |
| 174 | - if ([NSData sd_imageFormatFromUTType:uttype] == SDImageFormatPDF) { | |
| 175 | - isVector = YES; | |
| 176 | - } | |
| 177 | - | |
| 178 | - NSMutableDictionary *decodingOptions; | |
| 179 | - if (options) { | |
| 180 | - decodingOptions = [NSMutableDictionary dictionaryWithDictionary:options]; | |
| 181 | - } else { | |
| 182 | - decodingOptions = [NSMutableDictionary dictionary]; | |
| 183 | - } | |
| 184 | - CGImageRef imageRef; | |
| 185 | - if (thumbnailSize.width == 0 || thumbnailSize.height == 0 || pixelWidth == 0 || pixelHeight == 0 || (pixelWidth <= thumbnailSize.width && pixelHeight <= thumbnailSize.height)) { | |
| 186 | - if (isVector) { | |
| 187 | - if (thumbnailSize.width == 0 || thumbnailSize.height == 0) { | |
| 188 | - // Provide the default pixel count for vector images, simply just use the screen size | |
| 189 | -#if SD_WATCH | |
| 190 | - thumbnailSize = WKInterfaceDevice.currentDevice.screenBounds.size; | |
| 191 | -#elif SD_UIKIT | |
| 192 | - thumbnailSize = UIScreen.mainScreen.bounds.size; | |
| 193 | -#elif SD_MAC | |
| 194 | - thumbnailSize = NSScreen.mainScreen.frame.size; | |
| 195 | -#endif | |
| 196 | - } | |
| 197 | - CGFloat maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); | |
| 198 | - NSUInteger DPIPerPixel = 2; | |
| 199 | - NSUInteger rasterizationDPI = maxPixelSize * DPIPerPixel; | |
| 200 | - decodingOptions[kSDCGImageSourceRasterizationDPI] = @(rasterizationDPI); | |
| 201 | - } | |
| 202 | - imageRef = CGImageSourceCreateImageAtIndex(source, index, (__bridge CFDictionaryRef)[decodingOptions copy]); | |
| 203 | - } else { | |
| 204 | - decodingOptions[(__bridge NSString *)kCGImageSourceCreateThumbnailWithTransform] = @(preserveAspectRatio); | |
| 205 | - CGFloat maxPixelSize; | |
| 206 | - if (preserveAspectRatio) { | |
| 207 | - CGFloat pixelRatio = pixelWidth / pixelHeight; | |
| 208 | - CGFloat thumbnailRatio = thumbnailSize.width / thumbnailSize.height; | |
| 209 | - if (pixelRatio > thumbnailRatio) { | |
| 210 | - maxPixelSize = thumbnailSize.width; | |
| 211 | - } else { | |
| 212 | - maxPixelSize = thumbnailSize.height; | |
| 213 | - } | |
| 214 | - } else { | |
| 215 | - maxPixelSize = MAX(thumbnailSize.width, thumbnailSize.height); | |
| 216 | - } | |
| 217 | - decodingOptions[(__bridge NSString *)kCGImageSourceThumbnailMaxPixelSize] = @(maxPixelSize); | |
| 218 | - decodingOptions[(__bridge NSString *)kCGImageSourceCreateThumbnailFromImageAlways] = @(YES); | |
| 219 | - imageRef = CGImageSourceCreateThumbnailAtIndex(source, index, (__bridge CFDictionaryRef)[decodingOptions copy]); | |
| 220 | - } | |
| 221 | - if (!imageRef) { | |
| 222 | - return nil; | |
| 223 | - } | |
| 224 | - | |
| 225 | - if (thumbnailSize.width > 0 && thumbnailSize.height > 0) { | |
| 226 | - if (preserveAspectRatio) { | |
| 227 | - // kCGImageSourceCreateThumbnailWithTransform will apply EXIF transform as well, we should not apply twice | |
| 228 | - exifOrientation = kCGImagePropertyOrientationUp; | |
| 229 | - } else { | |
| 230 | - // `CGImageSourceCreateThumbnailAtIndex` take only pixel dimension, if not `preserveAspectRatio`, we should manual scale to the target size | |
| 231 | - CGImageRef scaledImageRef = [SDImageCoderHelper CGImageCreateScaled:imageRef size:thumbnailSize]; | |
| 232 | - CGImageRelease(imageRef); | |
| 233 | - imageRef = scaledImageRef; | |
| 234 | - } | |
| 235 | - } | |
| 236 | - | |
| 237 | -#if SD_UIKIT || SD_WATCH | |
| 238 | - UIImageOrientation imageOrientation = [SDImageCoderHelper imageOrientationFromEXIFOrientation:exifOrientation]; | |
| 239 | - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:imageOrientation]; | |
| 240 | -#else | |
| 241 | - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:exifOrientation]; | |
| 242 | -#endif | |
| 243 | - CGImageRelease(imageRef); | |
| 244 | - return image; | |
| 245 | -} | |
| 246 | - | |
| 247 | 148 | #pragma mark - Decode |
| 248 | 149 | - (BOOL)canDecodeFromData:(nullable NSData *)data { |
| 249 | 150 | return ([NSData sd_imageFormatForImageData:data] == self.class.imageFormat); |
| ... | ... | @@ -259,34 +160,14 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 259 | 160 | scale = MAX([scaleFactor doubleValue], 1); |
| 260 | 161 | } |
| 261 | 162 | |
| 262 | - CGSize thumbnailSize = CGSizeZero; | |
| 263 | - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; | |
| 264 | - if (thumbnailSizeValue != nil) { | |
| 265 | 163 | #if SD_MAC |
| 266 | - thumbnailSize = thumbnailSizeValue.sizeValue; | |
| 164 | + SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; | |
| 165 | + NSSize size = NSMakeSize(imageRep.pixelsWide / scale, imageRep.pixelsHigh / scale); | |
| 166 | + imageRep.size = size; | |
| 167 | + NSImage *animatedImage = [[NSImage alloc] initWithSize:size]; | |
| 168 | + [animatedImage addRepresentation:imageRep]; | |
| 169 | + return animatedImage; | |
| 267 | 170 | #else |
| 268 | - thumbnailSize = thumbnailSizeValue.CGSizeValue; | |
| 269 | -#endif | |
| 270 | - } | |
| 271 | - | |
| 272 | - BOOL preserveAspectRatio = YES; | |
| 273 | - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; | |
| 274 | - if (preserveAspectRatioValue != nil) { | |
| 275 | - preserveAspectRatio = preserveAspectRatioValue.boolValue; | |
| 276 | - } | |
| 277 | - | |
| 278 | -#if SD_MAC | |
| 279 | - // If don't use thumbnail, prefers the built-in generation of frames (GIF/APNG) | |
| 280 | - // Which decode frames in time and reduce memory usage | |
| 281 | - if (thumbnailSize.width == 0 || thumbnailSize.height == 0) { | |
| 282 | - SDAnimatedImageRep *imageRep = [[SDAnimatedImageRep alloc] initWithData:data]; | |
| 283 | - NSSize size = NSMakeSize(imageRep.pixelsWide / scale, imageRep.pixelsHigh / scale); | |
| 284 | - imageRep.size = size; | |
| 285 | - NSImage *animatedImage = [[NSImage alloc] initWithSize:size]; | |
| 286 | - [animatedImage addRepresentation:imageRep]; | |
| 287 | - return animatedImage; | |
| 288 | - } | |
| 289 | -#endif | |
| 290 | 171 | |
| 291 | 172 | CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); |
| 292 | 173 | if (!source) { |
| ... | ... | @@ -297,17 +178,19 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 297 | 178 | |
| 298 | 179 | BOOL decodeFirstFrame = [options[SDImageCoderDecodeFirstFrameOnly] boolValue]; |
| 299 | 180 | if (decodeFirstFrame || count <= 1) { |
| 300 | - animatedImage = [self.class createFrameAtIndex:0 source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:nil]; | |
| 181 | + animatedImage = [[UIImage alloc] initWithData:data scale:scale]; | |
| 301 | 182 | } else { |
| 302 | 183 | NSMutableArray<SDImageFrame *> *frames = [NSMutableArray array]; |
| 303 | 184 | |
| 304 | 185 | for (size_t i = 0; i < count; i++) { |
| 305 | - UIImage *image = [self.class createFrameAtIndex:i source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:nil]; | |
| 306 | - if (!image) { | |
| 186 | + CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, i, NULL); | |
| 187 | + if (!imageRef) { | |
| 307 | 188 | continue; |
| 308 | 189 | } |
| 309 | 190 | |
| 310 | 191 | NSTimeInterval duration = [self.class frameDurationAtIndex:i source:source]; |
| 192 | + UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:scale orientation:UIImageOrientationUp]; | |
| 193 | + CGImageRelease(imageRef); | |
| 311 | 194 | |
| 312 | 195 | SDImageFrame *frame = [SDImageFrame frameWithImage:image duration:duration]; |
| 313 | 196 | [frames addObject:frame]; |
| ... | ... | @@ -322,6 +205,7 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 322 | 205 | CFRelease(source); |
| 323 | 206 | |
| 324 | 207 | return animatedImage; |
| 208 | +#endif | |
| 325 | 209 | } |
| 326 | 210 | |
| 327 | 211 | #pragma mark - Progressive Decode |
| ... | ... | @@ -341,22 +225,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 341 | 225 | scale = MAX([scaleFactor doubleValue], 1); |
| 342 | 226 | } |
| 343 | 227 | _scale = scale; |
| 344 | - CGSize thumbnailSize = CGSizeZero; | |
| 345 | - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; | |
| 346 | - if (thumbnailSizeValue != nil) { | |
| 347 | - #if SD_MAC | |
| 348 | - thumbnailSize = thumbnailSizeValue.sizeValue; | |
| 349 | - #else | |
| 350 | - thumbnailSize = thumbnailSizeValue.CGSizeValue; | |
| 351 | - #endif | |
| 352 | - } | |
| 353 | - _thumbnailSize = thumbnailSize; | |
| 354 | - BOOL preserveAspectRatio = YES; | |
| 355 | - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; | |
| 356 | - if (preserveAspectRatioValue != nil) { | |
| 357 | - preserveAspectRatio = preserveAspectRatioValue.boolValue; | |
| 358 | - } | |
| 359 | - _preserveAspectRatio = preserveAspectRatio; | |
| 360 | 228 | #if SD_UIKIT |
| 361 | 229 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; |
| 362 | 230 | #endif |
| ... | ... | @@ -378,11 +246,7 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 378 | 246 | CGImageSourceUpdateData(_imageSource, (__bridge CFDataRef)data, finished); |
| 379 | 247 | |
| 380 | 248 | if (_width + _height == 0) { |
| 381 | - NSDictionary *options = @{ | |
| 382 | - (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @(YES), | |
| 383 | - (__bridge NSString *)kCGImageSourceShouldCache : @(YES) // Always cache to reduce CPU usage | |
| 384 | - }; | |
| 385 | - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(_imageSource, 0, (__bridge CFDictionaryRef)options); | |
| 249 | + CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(_imageSource, 0, NULL); | |
| 386 | 250 | if (properties) { |
| 387 | 251 | CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); |
| 388 | 252 | if (val) CFNumberGetValue(val, kCFNumberLongType, &_height); |
| ... | ... | @@ -401,13 +265,20 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 401 | 265 | |
| 402 | 266 | if (_width + _height > 0) { |
| 403 | 267 | // Create the image |
| 404 | - CGFloat scale = _scale; | |
| 405 | - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; | |
| 406 | - if (scaleFactor != nil) { | |
| 407 | - scale = MAX([scaleFactor doubleValue], 1); | |
| 408 | - } | |
| 409 | - image = [self.class createFrameAtIndex:0 source:_imageSource scale:scale preserveAspectRatio:_preserveAspectRatio thumbnailSize:_thumbnailSize options:nil]; | |
| 410 | - if (image) { | |
| 268 | + CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(_imageSource, 0, NULL); | |
| 269 | + | |
| 270 | + if (partialImageRef) { | |
| 271 | + CGFloat scale = _scale; | |
| 272 | + NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; | |
| 273 | + if (scaleFactor != nil) { | |
| 274 | + scale = MAX([scaleFactor doubleValue], 1); | |
| 275 | + } | |
| 276 | +#if SD_UIKIT || SD_WATCH | |
| 277 | + image = [[UIImage alloc] initWithCGImage:partialImageRef scale:scale orientation:UIImageOrientationUp]; | |
| 278 | +#else | |
| 279 | + image = [[UIImage alloc] initWithCGImage:partialImageRef scale:scale orientation:kCGImagePropertyOrientationUp]; | |
| 280 | +#endif | |
| 281 | + CGImageRelease(partialImageRef); | |
| 411 | 282 | image.sd_imageFormat = self.class.imageFormat; |
| 412 | 283 | } |
| 413 | 284 | } |
| ... | ... | @@ -424,11 +295,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 424 | 295 | if (!image) { |
| 425 | 296 | return nil; |
| 426 | 297 | } |
| 427 | - CGImageRef imageRef = image.CGImage; | |
| 428 | - if (!imageRef) { | |
| 429 | - // Earily return, supports CGImage only | |
| 430 | - return nil; | |
| 431 | - } | |
| 432 | 298 | |
| 433 | 299 | if (format != self.class.imageFormat) { |
| 434 | 300 | return nil; |
| ... | ... | @@ -446,69 +312,29 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 446 | 312 | return nil; |
| 447 | 313 | } |
| 448 | 314 | NSMutableDictionary *properties = [NSMutableDictionary dictionary]; |
| 449 | - // Encoding Options | |
| 450 | 315 | double compressionQuality = 1; |
| 451 | 316 | if (options[SDImageCoderEncodeCompressionQuality]) { |
| 452 | 317 | compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue]; |
| 453 | 318 | } |
| 454 | 319 | properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = @(compressionQuality); |
| 455 | - CGColorRef backgroundColor = [options[SDImageCoderEncodeBackgroundColor] CGColor]; | |
| 456 | - if (backgroundColor) { | |
| 457 | - properties[(__bridge NSString *)kCGImageDestinationBackgroundColor] = (__bridge id)(backgroundColor); | |
| 458 | - } | |
| 459 | - CGSize maxPixelSize = CGSizeZero; | |
| 460 | - NSValue *maxPixelSizeValue = options[SDImageCoderEncodeMaxPixelSize]; | |
| 461 | - if (maxPixelSizeValue != nil) { | |
| 462 | -#if SD_MAC | |
| 463 | - maxPixelSize = maxPixelSizeValue.sizeValue; | |
| 464 | -#else | |
| 465 | - maxPixelSize = maxPixelSizeValue.CGSizeValue; | |
| 466 | -#endif | |
| 467 | - } | |
| 468 | - NSUInteger pixelWidth = CGImageGetWidth(imageRef); | |
| 469 | - NSUInteger pixelHeight = CGImageGetHeight(imageRef); | |
| 470 | - CGFloat finalPixelSize = 0; | |
| 471 | - if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && pixelWidth > maxPixelSize.width && pixelHeight > maxPixelSize.height) { | |
| 472 | - CGFloat pixelRatio = pixelWidth / pixelHeight; | |
| 473 | - CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; | |
| 474 | - if (pixelRatio > maxPixelSizeRatio) { | |
| 475 | - finalPixelSize = maxPixelSize.width; | |
| 476 | - } else { | |
| 477 | - finalPixelSize = maxPixelSize.height; | |
| 478 | - } | |
| 479 | - properties[(__bridge NSString *)kCGImageDestinationImageMaxPixelSize] = @(finalPixelSize); | |
| 480 | - } | |
| 481 | - NSUInteger maxFileSize = [options[SDImageCoderEncodeMaxFileSize] unsignedIntegerValue]; | |
| 482 | - if (maxFileSize > 0) { | |
| 483 | - properties[kSDCGImageDestinationRequestedFileSize] = @(maxFileSize); | |
| 484 | - // Remove the quality if we have file size limit | |
| 485 | - properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = nil; | |
| 486 | - } | |
| 487 | - BOOL embedThumbnail = NO; | |
| 488 | - if (options[SDImageCoderEncodeEmbedThumbnail]) { | |
| 489 | - embedThumbnail = [options[SDImageCoderEncodeEmbedThumbnail] boolValue]; | |
| 490 | - } | |
| 491 | - properties[(__bridge NSString *)kCGImageDestinationEmbedThumbnail] = @(embedThumbnail); | |
| 492 | 320 | |
| 493 | 321 | BOOL encodeFirstFrame = [options[SDImageCoderEncodeFirstFrameOnly] boolValue]; |
| 494 | 322 | if (encodeFirstFrame || frames.count == 0) { |
| 495 | 323 | // for static single images |
| 496 | - CGImageDestinationAddImage(imageDestination, imageRef, (__bridge CFDictionaryRef)properties); | |
| 324 | + CGImageDestinationAddImage(imageDestination, image.CGImage, (__bridge CFDictionaryRef)properties); | |
| 497 | 325 | } else { |
| 498 | 326 | // for animated images |
| 499 | 327 | NSUInteger loopCount = image.sd_imageLoopCount; |
| 500 | - NSDictionary *containerProperties = @{ | |
| 501 | - self.class.dictionaryProperty: @{self.class.loopCountProperty : @(loopCount)} | |
| 502 | - }; | |
| 503 | - // container level properties (applies for `CGImageDestinationSetProperties`, not individual frames) | |
| 504 | - CGImageDestinationSetProperties(imageDestination, (__bridge CFDictionaryRef)containerProperties); | |
| 328 | + NSDictionary *containerProperties = @{self.class.loopCountProperty : @(loopCount)}; | |
| 329 | + properties[self.class.dictionaryProperty] = containerProperties; | |
| 330 | + CGImageDestinationSetProperties(imageDestination, (__bridge CFDictionaryRef)properties); | |
| 505 | 331 | |
| 506 | 332 | for (size_t i = 0; i < frames.count; i++) { |
| 507 | 333 | SDImageFrame *frame = frames[i]; |
| 508 | 334 | NSTimeInterval frameDuration = frame.duration; |
| 509 | 335 | CGImageRef frameImageRef = frame.image.CGImage; |
| 510 | - properties[self.class.dictionaryProperty] = @{self.class.delayTimeProperty : @(frameDuration)}; | |
| 511 | - CGImageDestinationAddImage(imageDestination, frameImageRef, (__bridge CFDictionaryRef)properties); | |
| 336 | + NSDictionary *frameProperties = @{self.class.dictionaryProperty : @{self.class.delayTimeProperty : @(frameDuration)}}; | |
| 337 | + CGImageDestinationAddImage(imageDestination, frameImageRef, (__bridge CFDictionaryRef)frameProperties); | |
| 512 | 338 | } |
| 513 | 339 | } |
| 514 | 340 | // Finalize the destination. |
| ... | ... | @@ -544,22 +370,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 544 | 370 | scale = MAX([scaleFactor doubleValue], 1); |
| 545 | 371 | } |
| 546 | 372 | _scale = scale; |
| 547 | - CGSize thumbnailSize = CGSizeZero; | |
| 548 | - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; | |
| 549 | - if (thumbnailSizeValue != nil) { | |
| 550 | - #if SD_MAC | |
| 551 | - thumbnailSize = thumbnailSizeValue.sizeValue; | |
| 552 | - #else | |
| 553 | - thumbnailSize = thumbnailSizeValue.CGSizeValue; | |
| 554 | - #endif | |
| 555 | - } | |
| 556 | - _thumbnailSize = thumbnailSize; | |
| 557 | - BOOL preserveAspectRatio = YES; | |
| 558 | - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; | |
| 559 | - if (preserveAspectRatioValue != nil) { | |
| 560 | - preserveAspectRatio = preserveAspectRatioValue.boolValue; | |
| 561 | - } | |
| 562 | - _preserveAspectRatio = preserveAspectRatio; | |
| 563 | 373 | _imageSource = imageSource; |
| 564 | 374 | _imageData = data; |
| 565 | 375 | #if SD_UIKIT |
| ... | ... | @@ -611,20 +421,23 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 611 | 421 | } |
| 612 | 422 | |
| 613 | 423 | - (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index { |
| 614 | - if (index >= _frameCount) { | |
| 424 | + CGImageRef imageRef = CGImageSourceCreateImageAtIndex(_imageSource, index, NULL); | |
| 425 | + if (!imageRef) { | |
| 615 | 426 | return nil; |
| 616 | 427 | } |
| 617 | - // Animated Image should not use the CGContext solution to force decode. Prefers to use Image/IO built in method, which is safer and memory friendly, see https://github.com/SDWebImage/SDWebImage/issues/2961 | |
| 618 | - NSDictionary *options = @{ | |
| 619 | - (__bridge NSString *)kCGImageSourceShouldCacheImmediately : @(YES), | |
| 620 | - (__bridge NSString *)kCGImageSourceShouldCache : @(YES) // Always cache to reduce CPU usage | |
| 621 | - }; | |
| 622 | - UIImage *image = [self.class createFrameAtIndex:index source:_imageSource scale:_scale preserveAspectRatio:_preserveAspectRatio thumbnailSize:_thumbnailSize options:options]; | |
| 623 | - if (!image) { | |
| 624 | - return nil; | |
| 428 | + // Image/IO create CGImage does not decode, so we do this because this is called background queue, this can avoid main queue block when rendering(especially when one more imageViews use the same image instance) | |
| 429 | + CGImageRef newImageRef = [SDImageCoderHelper CGImageCreateDecoded:imageRef]; | |
| 430 | + if (!newImageRef) { | |
| 431 | + newImageRef = imageRef; | |
| 432 | + } else { | |
| 433 | + CGImageRelease(imageRef); | |
| 625 | 434 | } |
| 626 | - image.sd_imageFormat = self.class.imageFormat; | |
| 627 | - image.sd_isDecoded = YES;; | |
| 435 | +#if SD_MAC | |
| 436 | + UIImage *image = [[UIImage alloc] initWithCGImage:newImageRef scale:_scale orientation:kCGImagePropertyOrientationUp]; | |
| 437 | +#else | |
| 438 | + UIImage *image = [[UIImage alloc] initWithCGImage:newImageRef scale:_scale orientation:UIImageOrientationUp]; | |
| 439 | +#endif | |
| 440 | + CGImageRelease(newImageRef); | |
| 628 | 441 | return image; |
| 629 | 442 | } |
| 630 | 443 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m
| ... | ... | @@ -12,10 +12,6 @@ |
| 12 | 12 | #import <ImageIO/ImageIO.h> |
| 13 | 13 | #import "UIImage+Metadata.h" |
| 14 | 14 | #import "SDImageHEICCoderInternal.h" |
| 15 | -#import "SDImageIOAnimatedCoderInternal.h" | |
| 16 | - | |
| 17 | -// Specify File Size for lossy format encoding, like JPEG | |
| 18 | -static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestinationRequestedFileSize"; | |
| 19 | 15 | |
| 20 | 16 | @implementation SDImageIOCoder { |
| 21 | 17 | size_t _width, _height; |
| ... | ... | @@ -23,8 +19,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 23 | 19 | CGImageSourceRef _imageSource; |
| 24 | 20 | CGFloat _scale; |
| 25 | 21 | BOOL _finished; |
| 26 | - BOOL _preserveAspectRatio; | |
| 27 | - CGSize _thumbnailSize; | |
| 28 | 22 | } |
| 29 | 23 | |
| 30 | 24 | - (void)dealloc { |
| ... | ... | @@ -80,33 +74,7 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 80 | 74 | scale = MAX([scaleFactor doubleValue], 1) ; |
| 81 | 75 | } |
| 82 | 76 | |
| 83 | - CGSize thumbnailSize = CGSizeZero; | |
| 84 | - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; | |
| 85 | - if (thumbnailSizeValue != nil) { | |
| 86 | -#if SD_MAC | |
| 87 | - thumbnailSize = thumbnailSizeValue.sizeValue; | |
| 88 | -#else | |
| 89 | - thumbnailSize = thumbnailSizeValue.CGSizeValue; | |
| 90 | -#endif | |
| 91 | - } | |
| 92 | - | |
| 93 | - BOOL preserveAspectRatio = YES; | |
| 94 | - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; | |
| 95 | - if (preserveAspectRatioValue != nil) { | |
| 96 | - preserveAspectRatio = preserveAspectRatioValue.boolValue; | |
| 97 | - } | |
| 98 | - | |
| 99 | - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); | |
| 100 | - if (!source) { | |
| 101 | - return nil; | |
| 102 | - } | |
| 103 | - | |
| 104 | - UIImage *image = [SDImageIOAnimatedCoder createFrameAtIndex:0 source:source scale:scale preserveAspectRatio:preserveAspectRatio thumbnailSize:thumbnailSize options:nil]; | |
| 105 | - CFRelease(source); | |
| 106 | - if (!image) { | |
| 107 | - return nil; | |
| 108 | - } | |
| 109 | - | |
| 77 | + UIImage *image = [[UIImage alloc] initWithData:data scale:scale]; | |
| 110 | 78 | image.sd_imageFormat = [NSData sd_imageFormatForImageData:data]; |
| 111 | 79 | return image; |
| 112 | 80 | } |
| ... | ... | @@ -127,22 +95,6 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 127 | 95 | scale = MAX([scaleFactor doubleValue], 1); |
| 128 | 96 | } |
| 129 | 97 | _scale = scale; |
| 130 | - CGSize thumbnailSize = CGSizeZero; | |
| 131 | - NSValue *thumbnailSizeValue = options[SDImageCoderDecodeThumbnailPixelSize]; | |
| 132 | - if (thumbnailSizeValue != nil) { | |
| 133 | - #if SD_MAC | |
| 134 | - thumbnailSize = thumbnailSizeValue.sizeValue; | |
| 135 | - #else | |
| 136 | - thumbnailSize = thumbnailSizeValue.CGSizeValue; | |
| 137 | - #endif | |
| 138 | - } | |
| 139 | - _thumbnailSize = thumbnailSize; | |
| 140 | - BOOL preserveAspectRatio = YES; | |
| 141 | - NSNumber *preserveAspectRatioValue = options[SDImageCoderDecodePreserveAspectRatio]; | |
| 142 | - if (preserveAspectRatioValue != nil) { | |
| 143 | - preserveAspectRatio = preserveAspectRatioValue.boolValue; | |
| 144 | - } | |
| 145 | - _preserveAspectRatio = preserveAspectRatio; | |
| 146 | 98 | #if SD_UIKIT |
| 147 | 99 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; |
| 148 | 100 | #endif |
| ... | ... | @@ -188,13 +140,21 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 188 | 140 | |
| 189 | 141 | if (_width + _height > 0) { |
| 190 | 142 | // Create the image |
| 191 | - CGFloat scale = _scale; | |
| 192 | - NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; | |
| 193 | - if (scaleFactor != nil) { | |
| 194 | - scale = MAX([scaleFactor doubleValue], 1); | |
| 195 | - } | |
| 196 | - image = [SDImageIOAnimatedCoder createFrameAtIndex:0 source:_imageSource scale:scale preserveAspectRatio:_preserveAspectRatio thumbnailSize:_thumbnailSize options:nil]; | |
| 197 | - if (image) { | |
| 143 | + CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(_imageSource, 0, NULL); | |
| 144 | + | |
| 145 | + if (partialImageRef) { | |
| 146 | + CGFloat scale = _scale; | |
| 147 | + NSNumber *scaleFactor = options[SDImageCoderDecodeScaleFactor]; | |
| 148 | + if (scaleFactor != nil) { | |
| 149 | + scale = MAX([scaleFactor doubleValue], 1); | |
| 150 | + } | |
| 151 | +#if SD_UIKIT || SD_WATCH | |
| 152 | + UIImageOrientation imageOrientation = [SDImageCoderHelper imageOrientationFromEXIFOrientation:_orientation]; | |
| 153 | + image = [[UIImage alloc] initWithCGImage:partialImageRef scale:scale orientation:imageOrientation]; | |
| 154 | +#else | |
| 155 | + image = [[UIImage alloc] initWithCGImage:partialImageRef scale:scale orientation:_orientation]; | |
| 156 | +#endif | |
| 157 | + CGImageRelease(partialImageRef); | |
| 198 | 158 | CFStringRef uttype = CGImageSourceGetType(_imageSource); |
| 199 | 159 | image.sd_imageFormat = [NSData sd_imageFormatFromUTType:uttype]; |
| 200 | 160 | } |
| ... | ... | @@ -224,14 +184,9 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 224 | 184 | if (!image) { |
| 225 | 185 | return nil; |
| 226 | 186 | } |
| 227 | - CGImageRef imageRef = image.CGImage; | |
| 228 | - if (!imageRef) { | |
| 229 | - // Earily return, supports CGImage only | |
| 230 | - return nil; | |
| 231 | - } | |
| 232 | 187 | |
| 233 | 188 | if (format == SDImageFormatUndefined) { |
| 234 | - BOOL hasAlpha = [SDImageCoderHelper CGImageContainsAlpha:imageRef]; | |
| 189 | + BOOL hasAlpha = [SDImageCoderHelper CGImageContainsAlpha:image.CGImage]; | |
| 235 | 190 | if (hasAlpha) { |
| 236 | 191 | format = SDImageFormatPNG; |
| 237 | 192 | } else { |
| ... | ... | @@ -256,52 +211,14 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination |
| 256 | 211 | CGImagePropertyOrientation exifOrientation = kCGImagePropertyOrientationUp; |
| 257 | 212 | #endif |
| 258 | 213 | properties[(__bridge NSString *)kCGImagePropertyOrientation] = @(exifOrientation); |
| 259 | - // Encoding Options | |
| 260 | 214 | double compressionQuality = 1; |
| 261 | 215 | if (options[SDImageCoderEncodeCompressionQuality]) { |
| 262 | 216 | compressionQuality = [options[SDImageCoderEncodeCompressionQuality] doubleValue]; |
| 263 | 217 | } |
| 264 | 218 | properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = @(compressionQuality); |
| 265 | - CGColorRef backgroundColor = [options[SDImageCoderEncodeBackgroundColor] CGColor]; | |
| 266 | - if (backgroundColor) { | |
| 267 | - properties[(__bridge NSString *)kCGImageDestinationBackgroundColor] = (__bridge id)(backgroundColor); | |
| 268 | - } | |
| 269 | - CGSize maxPixelSize = CGSizeZero; | |
| 270 | - NSValue *maxPixelSizeValue = options[SDImageCoderEncodeMaxPixelSize]; | |
| 271 | - if (maxPixelSizeValue != nil) { | |
| 272 | -#if SD_MAC | |
| 273 | - maxPixelSize = maxPixelSizeValue.sizeValue; | |
| 274 | -#else | |
| 275 | - maxPixelSize = maxPixelSizeValue.CGSizeValue; | |
| 276 | -#endif | |
| 277 | - } | |
| 278 | - NSUInteger pixelWidth = CGImageGetWidth(imageRef); | |
| 279 | - NSUInteger pixelHeight = CGImageGetHeight(imageRef); | |
| 280 | - if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && pixelWidth > maxPixelSize.width && pixelHeight > maxPixelSize.height) { | |
| 281 | - CGFloat pixelRatio = pixelWidth / pixelHeight; | |
| 282 | - CGFloat maxPixelSizeRatio = maxPixelSize.width / maxPixelSize.height; | |
| 283 | - CGFloat finalPixelSize; | |
| 284 | - if (pixelRatio > maxPixelSizeRatio) { | |
| 285 | - finalPixelSize = maxPixelSize.width; | |
| 286 | - } else { | |
| 287 | - finalPixelSize = maxPixelSize.height; | |
| 288 | - } | |
| 289 | - properties[(__bridge NSString *)kCGImageDestinationImageMaxPixelSize] = @(finalPixelSize); | |
| 290 | - } | |
| 291 | - NSUInteger maxFileSize = [options[SDImageCoderEncodeMaxFileSize] unsignedIntegerValue]; | |
| 292 | - if (maxFileSize > 0) { | |
| 293 | - properties[kSDCGImageDestinationRequestedFileSize] = @(maxFileSize); | |
| 294 | - // Remove the quality if we have file size limit | |
| 295 | - properties[(__bridge NSString *)kCGImageDestinationLossyCompressionQuality] = nil; | |
| 296 | - } | |
| 297 | - BOOL embedThumbnail = NO; | |
| 298 | - if (options[SDImageCoderEncodeEmbedThumbnail]) { | |
| 299 | - embedThumbnail = [options[SDImageCoderEncodeEmbedThumbnail] boolValue]; | |
| 300 | - } | |
| 301 | - properties[(__bridge NSString *)kCGImageDestinationEmbedThumbnail] = @(embedThumbnail); | |
| 302 | 219 | |
| 303 | 220 | // Add your image to the destination. |
| 304 | - CGImageDestinationAddImage(imageDestination, imageRef, (__bridge CFDictionaryRef)properties); | |
| 221 | + CGImageDestinationAddImage(imageDestination, image.CGImage, (__bridge CFDictionaryRef)properties); | |
| 305 | 222 | |
| 306 | 223 | // Finalize the destination. |
| 307 | 224 | if (CGImageDestinationFinalize(imageDestination) == NO) { | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.h
| ... | ... | @@ -18,7 +18,7 @@ typedef void(^SDImageLoaderCompletedBlock)(UIImage * _Nullable image, NSData * _ |
| 18 | 18 | /** |
| 19 | 19 | A `UIImage` instance from `SDWebImageManager` when you specify `SDWebImageRefreshCached` and image cache hit. |
| 20 | 20 | This can be a hint for image loader to load the image from network and refresh the image from remote location if needed. If the image from remote location does not change, you should call the completion with `SDWebImageErrorCacheNotModified` error. (UIImage) |
| 21 | - @note If you don't implement `SDWebImageRefreshCached` support, you do not need to care about this context option. | |
| 21 | + @note If you don't implement `SDWebImageRefreshCached` support, you do not need to care abot this context option. | |
| 22 | 22 | */ |
| 23 | 23 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextLoaderCachedImage; |
| 24 | 24 | |
| ... | ... | @@ -53,16 +53,16 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageLoaderDecodeProgressiveImageData(NS |
| 53 | 53 | #pragma mark - SDImageLoader |
| 54 | 54 | |
| 55 | 55 | /** |
| 56 | - This is the protocol to specify custom image load process. You can create your own class to conform this protocol and use as a image loader to load image from network or any available remote resources defined by yourself. | |
| 56 | + This is the protocol to specify custom image load process. You can create your own class to conform this protocol and use as a image loader to load image from network or any avaiable remote resources defined by yourself. | |
| 57 | 57 | If you want to implement custom loader for image download from network or local file, you just need to concentrate on image data download only. After the download finish, call `SDImageLoaderDecodeImageData` or `SDImageLoaderDecodeProgressiveImageData` to use the built-in decoding process and produce image (Remember to call in the global queue). And finally callback the completion block. |
| 58 | - If you directly get the image instance using some third-party SDKs, such as image directly from Photos framework. You can process the image data and image instance by yourself without that built-in decoding process. And finally callback the completion block. | |
| 58 | + If you directlly get the image instance using some third-party SDKs, such as image directlly from Photos framework. You can process the image data and image instance by yourself without that built-in decoding process. And finally callback the completion block. | |
| 59 | 59 | @note It's your responsibility to load the image in the desired global queue(to avoid block main queue). We do not dispatch these method call in a global queue but just from the call queue (For `SDWebImageManager`, it typically call from the main queue). |
| 60 | 60 | */ |
| 61 | 61 | @protocol SDImageLoader <NSObject> |
| 62 | 62 | |
| 63 | 63 | /** |
| 64 | 64 | Whether current image loader supports to load the provide image URL. |
| 65 | - This will be checked every time a new image request come for loader. If this return NO, we will mark this image load as failed. If return YES, we will start to call `requestImageWithURL:options:context:progress:completed:`. | |
| 65 | + This will be checked everytime a new image request come for loader. If this return NO, we will mark this image load as failed. If return YES, we will start to call `requestImageWithURL:options:context:progress:completed:`. | |
| 66 | 66 | |
| 67 | 67 | @param url The image URL to be loaded. |
| 68 | 68 | @return YES to continue download, NO to stop download. |
| ... | ... | @@ -88,7 +88,7 @@ FOUNDATION_EXPORT UIImage * _Nullable SDImageLoaderDecodeProgressiveImageData(NS |
| 88 | 88 | |
| 89 | 89 | |
| 90 | 90 | /** |
| 91 | - Whether the error from image loader should be marked indeed un-recoverable or not. | |
| 91 | + Whether the error from image loader should be marked indded un-recoverable or not. | |
| 92 | 92 | If this return YES, failed URL which does not using `SDWebImageRetryFailed` will be blocked into black list. Else not. |
| 93 | 93 | |
| 94 | 94 | @param url The URL represent the image. Note this may not be a HTTP URL | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m
| ... | ... | @@ -32,32 +32,11 @@ UIImage * _Nullable SDImageLoaderDecodeImageData(NSData * _Nonnull imageData, NS |
| 32 | 32 | BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); |
| 33 | 33 | NSNumber *scaleValue = context[SDWebImageContextImageScaleFactor]; |
| 34 | 34 | CGFloat scale = scaleValue.doubleValue >= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); |
| 35 | - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; | |
| 36 | - NSValue *thumbnailSizeValue; | |
| 37 | - BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); | |
| 38 | - if (shouldScaleDown) { | |
| 39 | - CGFloat thumbnailPixels = SDImageCoderHelper.defaultScaleDownLimitBytes / 4; | |
| 40 | - CGFloat dimension = ceil(sqrt(thumbnailPixels)); | |
| 41 | - thumbnailSizeValue = @(CGSizeMake(dimension, dimension)); | |
| 42 | - } | |
| 43 | - if (context[SDWebImageContextImageThumbnailPixelSize]) { | |
| 44 | - thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; | |
| 45 | - } | |
| 46 | - | |
| 47 | - SDImageCoderMutableOptions *mutableCoderOptions = [NSMutableDictionary dictionaryWithCapacity:2]; | |
| 48 | - mutableCoderOptions[SDImageCoderDecodeFirstFrameOnly] = @(decodeFirstFrame); | |
| 49 | - mutableCoderOptions[SDImageCoderDecodeScaleFactor] = @(scale); | |
| 50 | - mutableCoderOptions[SDImageCoderDecodePreserveAspectRatio] = preserveAspectRatioValue; | |
| 51 | - mutableCoderOptions[SDImageCoderDecodeThumbnailPixelSize] = thumbnailSizeValue; | |
| 52 | - mutableCoderOptions[SDImageCoderWebImageContext] = context; | |
| 53 | - SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; | |
| 54 | - | |
| 55 | - // Grab the image coder | |
| 56 | - id<SDImageCoder> imageCoder; | |
| 57 | - if ([context[SDWebImageContextImageCoder] conformsToProtocol:@protocol(SDImageCoder)]) { | |
| 58 | - imageCoder = context[SDWebImageContextImageCoder]; | |
| 59 | - } else { | |
| 60 | - imageCoder = [SDImageCodersManager sharedManager]; | |
| 35 | + SDImageCoderOptions *coderOptions = @{SDImageCoderDecodeFirstFrameOnly : @(decodeFirstFrame), SDImageCoderDecodeScaleFactor : @(scale)}; | |
| 36 | + if (context) { | |
| 37 | + SDImageCoderMutableOptions *mutableCoderOptions = [coderOptions mutableCopy]; | |
| 38 | + [mutableCoderOptions setValue:context forKey:SDImageCoderWebImageContext]; | |
| 39 | + coderOptions = [mutableCoderOptions copy]; | |
| 61 | 40 | } |
| 62 | 41 | |
| 63 | 42 | if (!decodeFirstFrame) { |
| ... | ... | @@ -79,7 +58,7 @@ UIImage * _Nullable SDImageLoaderDecodeImageData(NSData * _Nonnull imageData, NS |
| 79 | 58 | } |
| 80 | 59 | } |
| 81 | 60 | if (!image) { |
| 82 | - image = [imageCoder decodedImageWithData:imageData options:coderOptions]; | |
| 61 | + image = [[SDImageCodersManager sharedManager] decodedImageWithData:imageData options:coderOptions]; | |
| 83 | 62 | } |
| 84 | 63 | if (image) { |
| 85 | 64 | BOOL shouldDecode = !SD_OPTIONS_CONTAINS(options, SDWebImageAvoidDecodeImage); |
| ... | ... | @@ -92,7 +71,12 @@ UIImage * _Nullable SDImageLoaderDecodeImageData(NSData * _Nonnull imageData, NS |
| 92 | 71 | } |
| 93 | 72 | |
| 94 | 73 | if (shouldDecode) { |
| 95 | - image = [SDImageCoderHelper decodedImageWithImage:image]; | |
| 74 | + BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); | |
| 75 | + if (shouldScaleDown) { | |
| 76 | + image = [SDImageCoderHelper decodedAndScaledDownImageWithImage:image limitBytes:0]; | |
| 77 | + } else { | |
| 78 | + image = [SDImageCoderHelper decodedImageWithImage:image]; | |
| 79 | + } | |
| 96 | 80 | } |
| 97 | 81 | } |
| 98 | 82 | |
| ... | ... | @@ -115,41 +99,21 @@ UIImage * _Nullable SDImageLoaderDecodeProgressiveImageData(NSData * _Nonnull im |
| 115 | 99 | BOOL decodeFirstFrame = SD_OPTIONS_CONTAINS(options, SDWebImageDecodeFirstFrameOnly); |
| 116 | 100 | NSNumber *scaleValue = context[SDWebImageContextImageScaleFactor]; |
| 117 | 101 | CGFloat scale = scaleValue.doubleValue >= 1 ? scaleValue.doubleValue : SDImageScaleFactorForKey(cacheKey); |
| 118 | - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; | |
| 119 | - NSValue *thumbnailSizeValue; | |
| 120 | - BOOL shouldScaleDown = SD_OPTIONS_CONTAINS(options, SDWebImageScaleDownLargeImages); | |
| 121 | - if (shouldScaleDown) { | |
| 122 | - CGFloat thumbnailPixels = SDImageCoderHelper.defaultScaleDownLimitBytes / 4; | |
| 123 | - CGFloat dimension = ceil(sqrt(thumbnailPixels)); | |
| 124 | - thumbnailSizeValue = @(CGSizeMake(dimension, dimension)); | |
| 125 | - } | |
| 126 | - if (context[SDWebImageContextImageThumbnailPixelSize]) { | |
| 127 | - thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; | |
| 102 | + SDImageCoderOptions *coderOptions = @{SDImageCoderDecodeFirstFrameOnly : @(decodeFirstFrame), SDImageCoderDecodeScaleFactor : @(scale)}; | |
| 103 | + if (context) { | |
| 104 | + SDImageCoderMutableOptions *mutableCoderOptions = [coderOptions mutableCopy]; | |
| 105 | + [mutableCoderOptions setValue:context forKey:SDImageCoderWebImageContext]; | |
| 106 | + coderOptions = [mutableCoderOptions copy]; | |
| 128 | 107 | } |
| 129 | 108 | |
| 130 | - SDImageCoderMutableOptions *mutableCoderOptions = [NSMutableDictionary dictionaryWithCapacity:2]; | |
| 131 | - mutableCoderOptions[SDImageCoderDecodeFirstFrameOnly] = @(decodeFirstFrame); | |
| 132 | - mutableCoderOptions[SDImageCoderDecodeScaleFactor] = @(scale); | |
| 133 | - mutableCoderOptions[SDImageCoderDecodePreserveAspectRatio] = preserveAspectRatioValue; | |
| 134 | - mutableCoderOptions[SDImageCoderDecodeThumbnailPixelSize] = thumbnailSizeValue; | |
| 135 | - mutableCoderOptions[SDImageCoderWebImageContext] = context; | |
| 136 | - SDImageCoderOptions *coderOptions = [mutableCoderOptions copy]; | |
| 137 | - | |
| 138 | - // Grab the progressive image coder | |
| 139 | 109 | id<SDProgressiveImageCoder> progressiveCoder = objc_getAssociatedObject(operation, SDImageLoaderProgressiveCoderKey); |
| 140 | 110 | if (!progressiveCoder) { |
| 141 | - id<SDProgressiveImageCoder> imageCoder = context[SDWebImageContextImageCoder]; | |
| 142 | - // Check the progressive coder if provided | |
| 143 | - if ([imageCoder conformsToProtocol:@protocol(SDProgressiveImageCoder)]) { | |
| 144 | - progressiveCoder = [[[imageCoder class] alloc] initIncrementalWithOptions:coderOptions]; | |
| 145 | - } else { | |
| 146 | - // We need to create a new instance for progressive decoding to avoid conflicts | |
| 147 | - for (id<SDImageCoder> coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) { | |
| 148 | - if ([coder conformsToProtocol:@protocol(SDProgressiveImageCoder)] && | |
| 149 | - [((id<SDProgressiveImageCoder>)coder) canIncrementalDecodeFromData:imageData]) { | |
| 150 | - progressiveCoder = [[[coder class] alloc] initIncrementalWithOptions:coderOptions]; | |
| 151 | - break; | |
| 152 | - } | |
| 111 | + // We need to create a new instance for progressive decoding to avoid conflicts | |
| 112 | + for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) { | |
| 113 | + if ([coder conformsToProtocol:@protocol(SDProgressiveImageCoder)] && | |
| 114 | + [((id<SDProgressiveImageCoder>)coder) canIncrementalDecodeFromData:imageData]) { | |
| 115 | + progressiveCoder = [[[coder class] alloc] initIncrementalWithOptions:coderOptions]; | |
| 116 | + break; | |
| 153 | 117 | } |
| 154 | 118 | } |
| 155 | 119 | objc_setAssociatedObject(operation, SDImageLoaderProgressiveCoderKey, progressiveCoder, OBJC_ASSOCIATION_RETAIN_NONATOMIC); | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h
Example/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.h
| ... | ... | @@ -19,16 +19,6 @@ |
| 19 | 19 | FOUNDATION_EXPORT NSString * _Nullable SDTransformedKeyForKey(NSString * _Nullable key, NSString * _Nonnull transformerKey); |
| 20 | 20 | |
| 21 | 21 | /** |
| 22 | - Return the thumbnailed cache key which applied with specify thumbnailSize and preserveAspectRatio control. | |
| 23 | - @param key The original cache key | |
| 24 | - @param thumbnailPixelSize The thumbnail pixel size | |
| 25 | - @param preserveAspectRatio The preserve aspect ratio option | |
| 26 | - @return The thumbnailed cache key | |
| 27 | - @note If you have both transformer and thumbnail applied for image, call `SDThumbnailedKeyForKey` firstly and then with `SDTransformedKeyForKey`.` | |
| 28 | - */ | |
| 29 | -FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullable key, CGSize thumbnailPixelSize, BOOL preserveAspectRatio); | |
| 30 | - | |
| 31 | -/** | |
| 32 | 22 | A transformer protocol to transform the image load from cache or from download. |
| 33 | 23 | You can provide transformer to cache and manager (Through the `transformer` property or context option `SDWebImageContextImageTransformer`). |
| 34 | 24 | |
| ... | ... | @@ -48,10 +38,10 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab |
| 48 | 38 | Transform the image to another image. |
| 49 | 39 | |
| 50 | 40 | @param image The image to be transformed |
| 51 | - @param key The cache key associated to the image. This arg is a hint for image source, not always useful and should be nullable. In the future we will remove this arg. | |
| 41 | + @param key The cache key associated to the image | |
| 52 | 42 | @return The transformed image, or nil if transform failed |
| 53 | 43 | */ |
| 54 | -- (nullable UIImage *)transformedImageWithImage:(nonnull UIImage *)image forKey:(nonnull NSString *)key API_DEPRECATED("The key arg will be removed in the future. Update your code and don't rely on that.", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); | |
| 44 | +- (nullable UIImage *)transformedImageWithImage:(nonnull UIImage *)image forKey:(nonnull NSString *)key; | |
| 55 | 45 | |
| 56 | 46 | @end |
| 57 | 47 | |
| ... | ... | @@ -59,7 +49,7 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab |
| 59 | 49 | |
| 60 | 50 | /** |
| 61 | 51 | Pipeline transformer. Which you can bind multiple transformers together to let the image to be transformed one by one in order and generate the final image. |
| 62 | - @note Because transformers are lightweight, if you want to append or arrange transformers, create another pipeline transformer instead. This class is considered as immutable. | |
| 52 | + @note Because transformers are lightweight, if you want to append or arrange transfomers, create another pipeline transformer instead. This class is considered as immutable. | |
| 63 | 53 | */ |
| 64 | 54 | @interface SDImagePipelineTransformer : NSObject <SDImageTransformer> |
| 65 | 55 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.m
| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | */ |
| 8 | 8 | |
| 9 | 9 | #import "SDImageTransformer.h" |
| 10 | -#import "UIColor+SDHexString.h" | |
| 10 | +#import "UIColor+HexString.h" | |
| 11 | 11 | #if SD_UIKIT || SD_MAC |
| 12 | 12 | #import <CoreImage/CoreImage.h> |
| 13 | 13 | #endif |
| ... | ... | @@ -38,11 +38,6 @@ NSString * _Nullable SDTransformedKeyForKey(NSString * _Nullable key, NSString * |
| 38 | 38 | } |
| 39 | 39 | } |
| 40 | 40 | |
| 41 | -NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullable key, CGSize thumbnailPixelSize, BOOL preserveAspectRatio) { | |
| 42 | - NSString *thumbnailKey = [NSString stringWithFormat:@"Thumbnail({%f,%f},%d)", thumbnailPixelSize.width, thumbnailPixelSize.height, preserveAspectRatio]; | |
| 43 | - return SDTransformedKeyForKey(key, thumbnailKey); | |
| 44 | -} | |
| 45 | - | |
| 46 | 41 | @interface SDImagePipelineTransformer () |
| 47 | 42 | |
| 48 | 43 | @property (nonatomic, copy, readwrite, nonnull) NSArray<id<SDImageTransformer>> *transformers; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.h
| ... | ... | @@ -15,7 +15,6 @@ |
| 15 | 15 | @protocol SDMemoryCache <NSObject> |
| 16 | 16 | |
| 17 | 17 | @required |
| 18 | - | |
| 19 | 18 | /** |
| 20 | 19 | Create a new memory cache instance with the specify cache config. You can check `maxMemoryCost` and `maxMemoryCount` used for memory cache. |
| 21 | 20 | |
| ... | ... | @@ -26,7 +25,7 @@ |
| 26 | 25 | |
| 27 | 26 | /** |
| 28 | 27 | Returns the value associated with a given key. |
| 29 | - | |
| 28 | + | |
| 30 | 29 | @param key An object identifying the value. If nil, just return nil. |
| 31 | 30 | @return The value associated with key, or nil if no value is associated with key. |
| 32 | 31 | */ |
| ... | ... | @@ -34,7 +33,7 @@ |
| 34 | 33 | |
| 35 | 34 | /** |
| 36 | 35 | Sets the value of the specified key in the cache (0 cost). |
| 37 | - | |
| 36 | + | |
| 38 | 37 | @param object The object to be stored in the cache. If nil, it calls `removeObjectForKey:`. |
| 39 | 38 | @param key The key with which to associate the value. If nil, this method has no effect. |
| 40 | 39 | @discussion Unlike an NSMutableDictionary object, a cache does not copy the key |
| ... | ... | @@ -45,7 +44,7 @@ |
| 45 | 44 | /** |
| 46 | 45 | Sets the value of the specified key in the cache, and associates the key-value |
| 47 | 46 | pair with the specified cost. |
| 48 | - | |
| 47 | + | |
| 49 | 48 | @param object The object to store in the cache. If nil, it calls `removeObjectForKey`. |
| 50 | 49 | @param key The key with which to associate the value. If nil, this method has no effect. |
| 51 | 50 | @param cost The cost with which to associate the key-value pair. |
| ... | ... | @@ -56,7 +55,7 @@ |
| 56 | 55 | |
| 57 | 56 | /** |
| 58 | 57 | Removes the value of the specified key in the cache. |
| 59 | - | |
| 58 | + | |
| 60 | 59 | @param key The key identifying the value to be removed. If nil, this method has no effect. |
| 61 | 60 | */ |
| 62 | 61 | - (void)removeObjectForKey:(nonnull id)key; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.m
| ... | ... | @@ -30,7 +30,6 @@ static void * SDMemoryCacheContext = &SDMemoryCacheContext; |
| 30 | 30 | #if SD_UIKIT |
| 31 | 31 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; |
| 32 | 32 | #endif |
| 33 | - self.delegate = nil; | |
| 34 | 33 | } |
| 35 | 34 | |
| 36 | 35 | - (instancetype)init { |
| ... | ... | @@ -55,14 +54,14 @@ static void * SDMemoryCacheContext = &SDMemoryCacheContext; |
| 55 | 54 | SDImageCacheConfig *config = self.config; |
| 56 | 55 | self.totalCostLimit = config.maxMemoryCost; |
| 57 | 56 | self.countLimit = config.maxMemoryCount; |
| 58 | - | |
| 57 | + | |
| 59 | 58 | [config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxMemoryCost)) options:0 context:SDMemoryCacheContext]; |
| 60 | 59 | [config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxMemoryCount)) options:0 context:SDMemoryCacheContext]; |
| 61 | - | |
| 60 | + | |
| 62 | 61 | #if SD_UIKIT |
| 63 | 62 | self.weakCache = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0]; |
| 64 | 63 | self.weakCacheLock = dispatch_semaphore_create(1); |
| 65 | - | |
| 64 | + | |
| 66 | 65 | [[NSNotificationCenter defaultCenter] addObserver:self |
| 67 | 66 | selector:@selector(didReceiveMemoryWarning:) |
| 68 | 67 | name:UIApplicationDidReceiveMemoryWarningNotification | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h
| ... | ... | @@ -17,10 +17,6 @@ typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull i |
| 17 | 17 | */ |
| 18 | 18 | @protocol SDWebImageCacheSerializer <NSObject> |
| 19 | 19 | |
| 20 | -/// Provide the image data associated to the image and store to disk cache | |
| 21 | -/// @param image The loaded image | |
| 22 | -/// @param data The original loaded image data | |
| 23 | -/// @param imageURL The image URL | |
| 24 | 20 | - (nullable NSData *)cacheDataWithImage:(nonnull UIImage *)image originalData:(nullable NSData *)data imageURL:(nullable NSURL *)imageURL; |
| 25 | 21 | |
| 26 | 22 | @end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h
| ... | ... | @@ -28,7 +28,7 @@ FOUNDATION_EXPORT CGFloat SDImageScaleFactorForKey(NSString * _Nullable key); |
| 28 | 28 | /** |
| 29 | 29 | Scale the image with the scale factor for the specify key. If no need to scale, return the original image. |
| 30 | 30 | This works for `UIImage`(UIKit) or `NSImage`(AppKit). And this function also preserve the associated value in `UIImage+Metadata.h`. |
| 31 | - @note This is actually a convenience function, which firstly call `SDImageScaleFactorForKey` and then call `SDScaledImageForScaleFactor`, kept for backward compatibility. | |
| 31 | + @note This is actually a convenience function, which firstlly call `SDImageScaleFactorForKey` and then call `SDScaledImageForScaleFactor`, kept for backward compatibility. | |
| 32 | 32 | |
| 33 | 33 | @param key The image cache key |
| 34 | 34 | @param image The image |
| ... | ... | @@ -122,12 +122,9 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { |
| 122 | 122 | SDWebImageAvoidAutoSetImage = 1 << 10, |
| 123 | 123 | |
| 124 | 124 | /** |
| 125 | - * By default, images are decoded respecting their original size. | |
| 126 | - * This flag will scale down the images to a size compatible with the constrained memory of devices. | |
| 127 | - * To control the limit memory bytes, check `SDImageCoderHelper.defaultScaleDownLimitBytes` (Defaults to 60MB on iOS) | |
| 128 | - * This will actually translate to use context option `.imageThumbnailPixelSize` from v5.5.0 (Defaults to (3966, 3966) on iOS). Previously does not. | |
| 129 | - * This flags effect the progressive and animated images as well from v5.5.0. Previously does not. | |
| 130 | - * @note If you need detail controls, it's better to use context option `imageThumbnailPixelSize` and `imagePreserveAspectRatio` instead. | |
| 125 | + * By default, images are decoded respecting their original size. On iOS, this flag will scale down the | |
| 126 | + * images to a size compatible with the constrained memory of devices. | |
| 127 | + * This flag take no effect if `SDWebImageAvoidDecodeImage` is set. And it will be ignored if `SDWebImageProgressiveLoad` is set. | |
| 131 | 128 | */ |
| 132 | 129 | SDWebImageScaleDownLargeImages = 1 << 11, |
| 133 | 130 | |
| ... | ... | @@ -171,7 +168,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { |
| 171 | 168 | SDWebImageAvoidDecodeImage = 1 << 18, |
| 172 | 169 | |
| 173 | 170 | /** |
| 174 | - * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. | |
| 171 | + * By default, we decode the animated image. This flag can force decode the first frame only and produece the static image. | |
| 175 | 172 | */ |
| 176 | 173 | SDWebImageDecodeFirstFrameOnly = 1 << 19, |
| 177 | 174 | |
| ... | ... | @@ -187,20 +184,6 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { |
| 187 | 184 | * Note this options is not compatible with `SDWebImageDecodeFirstFrameOnly`, which always produce a UIImage/NSImage. |
| 188 | 185 | */ |
| 189 | 186 | SDWebImageMatchAnimatedImageClass = 1 << 21, |
| 190 | - | |
| 191 | - /** | |
| 192 | - * By default, when we load the image from network, the image will be written to the cache (memory and disk, controlled by your `storeCacheType` context option) | |
| 193 | - * This maybe an asynchronously operation and the final `SDInternalCompletionBlock` callback does not guarantee the disk cache written is finished and may cause logic error. (For example, you modify the disk data just in completion block, however, the disk cache is not ready) | |
| 194 | - * If you need to process with the disk cache in the completion block, you should use this option to ensure the disk cache already been written when callback. | |
| 195 | - * Note if you use this when using the custom cache serializer, or using the transformer, we will also wait until the output image data written is finished. | |
| 196 | - */ | |
| 197 | - SDWebImageWaitStoreCache = 1 << 22, | |
| 198 | - | |
| 199 | - /** | |
| 200 | - * We usually don't apply transform on vector images, because vector images supports dynamically changing to any size, rasterize to a fixed size will loss details. To modify vector images, you can process the vector data at runtime (such as modifying PDF tag / SVG element). | |
| 201 | - * Use this flag to transform them anyway. | |
| 202 | - */ | |
| 203 | - SDWebImageTransformVectorImage = 1 << 23, | |
| 204 | 187 | }; |
| 205 | 188 | |
| 206 | 189 | |
| ... | ... | @@ -213,31 +196,11 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextSetIma |
| 213 | 196 | |
| 214 | 197 | /** |
| 215 | 198 | A SDWebImageManager instance to control the image download and cache process using in UIImageView+WebCache category and likes. If not provided, use the shared manager (SDWebImageManager *) |
| 216 | - @deprecated Deprecated in the future. This context options can be replaced by other context option control like `.imageCache`, `.imageLoader`, `.imageTransformer` (See below), which already matches all the properties in SDWebImageManager. | |
| 217 | 199 | */ |
| 218 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager API_DEPRECATED("Use individual context option like .imageCache, .imageLoader and .imageTransformer instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); | |
| 200 | +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager; | |
| 219 | 201 | |
| 220 | 202 | /** |
| 221 | - A id<SDImageCache> instance which conforms to `SDImageCache` protocol. It's used to override the image manager's cache during the image loading pipeline. | |
| 222 | - In other word, if you just want to specify a custom cache during image loading, you don't need to re-create a dummy SDWebImageManager instance with the cache. If not provided, use the image manager's cache (id<SDImageCache>) | |
| 223 | - */ | |
| 224 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageCache; | |
| 225 | - | |
| 226 | -/** | |
| 227 | - A id<SDImageLoader> instance which conforms to `SDImageLoader` protocol. It's used to override the image manager's loader during the image loading pipeline. | |
| 228 | - In other word, if you just want to specify a custom loader during image loading, you don't need to re-create a dummy SDWebImageManager instance with the loader. If not provided, use the image manager's cache (id<SDImageLoader>) | |
| 229 | -*/ | |
| 230 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageLoader; | |
| 231 | - | |
| 232 | -/** | |
| 233 | - A id<SDImageCoder> instance which conforms to `SDImageCoder` protocol. It's used to override the default image coder for image decoding(including progressive) and encoding during the image loading process. | |
| 234 | - If you use this context option, we will not always use `SDImageCodersManager.shared` to loop through all registered coders and find the suitable one. Instead, we will arbitrarily use the exact provided coder without extra checking (We may not call `canDecodeFromData:`). | |
| 235 | - @note This is only useful for cases which you can ensure the loading url matches your coder, or you find it's too hard to write a common coder which can used for generic usage. This will bind the loading url with the coder logic, which is not always a good design, but possible. (id<SDImageCache>) | |
| 236 | -*/ | |
| 237 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageCoder; | |
| 238 | - | |
| 239 | -/** | |
| 240 | - A id<SDImageTransformer> instance which conforms `SDImageTransformer` protocol. It's used for image transform after the image load finished and store the transformed image to cache. If you provide one, it will ignore the `transformer` in manager and use provided one instead. If you pass NSNull, the transformer feature will be disabled. (id<SDImageTransformer>) | |
| 203 | + A id<SDImageTransformer> instance which conforms `SDImageTransformer` protocol. It's used for image transform after the image load finished and store the transformed image to cache. If you provide one, it will ignore the `transformer` in manager and use provided one instead. (id<SDImageTransformer>) | |
| 241 | 204 | */ |
| 242 | 205 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTransformer; |
| 243 | 206 | |
| ... | ... | @@ -247,25 +210,6 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageT |
| 247 | 210 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageScaleFactor; |
| 248 | 211 | |
| 249 | 212 | /** |
| 250 | - A Boolean value indicating whether to keep the original aspect ratio when generating thumbnail images (or bitmap images from vector format). | |
| 251 | - Defaults to YES. (NSNumber) | |
| 252 | - */ | |
| 253 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImagePreserveAspectRatio; | |
| 254 | - | |
| 255 | -/** | |
| 256 | - A CGSize raw value indicating whether or not to generate the thumbnail images (or bitmap images from vector format). When this value is provided, the decoder will generate a thumbnail image which pixel size is smaller than or equal to (depends the `.imagePreserveAspectRatio`) the value size. | |
| 257 | - @note When you pass `.preserveAspectRatio == NO`, the thumbnail image is stretched to match each dimension. When `.preserveAspectRatio == YES`, the thumbnail image's width is limited to pixel size's width, the thumbnail image's height is limited to pixel size's height. For common cases, you can just pass a square size to limit both. | |
| 258 | - Defaults to CGSizeZero, which means no thumbnail generation at all. (NSValue) | |
| 259 | - */ | |
| 260 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageThumbnailPixelSize; | |
| 261 | - | |
| 262 | -/** | |
| 263 | - A SDImageCacheType raw value which specify the source of cache to query. Specify `SDImageCacheTypeDisk` to query from disk cache only; `SDImageCacheTypeMemory` to query from memory only. And `SDImageCacheTypeAll` to query from both memory cache and disk cache. Specify `SDImageCacheTypeNone` is invalid and totally ignore the cache query. | |
| 264 | - If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) | |
| 265 | - */ | |
| 266 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextQueryCacheType; | |
| 267 | - | |
| 268 | -/** | |
| 269 | 213 | A SDImageCacheType raw value which specify the store cache type when the image has just been downloaded and will be stored to the cache. Specify `SDImageCacheTypeNone` to disable cache storage; `SDImageCacheTypeDisk` to store in disk cache only; `SDImageCacheTypeMemory` to store in memory only. And `SDImageCacheTypeAll` to store in both memory cache and disk cache. |
| 270 | 214 | If you use image transformer feature, this actually apply for the transformed image, but not the original image itself. Use `SDWebImageContextOriginalStoreCacheType` if you want to control the original image's store cache type at the same time. |
| 271 | 215 | If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) |
| ... | ... | @@ -273,16 +217,8 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextQueryC |
| 273 | 217 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextStoreCacheType; |
| 274 | 218 | |
| 275 | 219 | /** |
| 276 | - The same behavior like `SDWebImageContextQueryCacheType`, but control the query cache type for the original image when you use image transformer feature. This allows the detail control of cache query for these two images. For example, if you want to query the transformed image from both memory/disk cache, query the original image from disk cache only, use `[.queryCacheType : .all, .originalQueryCacheType : .disk]` | |
| 277 | - If not provide or the value is invalid, we will use `SDImageCacheTypeNone`, which does not query the original image from cache. (NSNumber) | |
| 278 | - @note Which means, if you set this value to not be `.none`, we will query the original image from cache, then do transform with transformer, instead of actual downloading, which can save bandwidth usage. | |
| 279 | - */ | |
| 280 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextOriginalQueryCacheType; | |
| 281 | - | |
| 282 | -/** | |
| 283 | 220 | The same behavior like `SDWebImageContextStoreCacheType`, but control the store cache type for the original image when you use image transformer feature. This allows the detail control of cache storage for these two images. For example, if you want to store the transformed image into both memory/disk cache, store the original image into disk cache only, use `[.storeCacheType : .all, .originalStoreCacheType : .disk]` |
| 284 | 221 | If not provide or the value is invalid, we will use `SDImageCacheTypeNone`, which does not store the original image into cache. (NSNumber) |
| 285 | - @note This only store the original image, if you want to use the original image without downloading in next query, specify `SDWebImageContextOriginalQueryCacheType` as well. | |
| 286 | 222 | */ |
| 287 | 223 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextOriginalStoreCacheType; |
| 288 | 224 | |
| ... | ... | @@ -298,16 +234,6 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextAnimat |
| 298 | 234 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextDownloadRequestModifier; |
| 299 | 235 | |
| 300 | 236 | /** |
| 301 | - A id<SDWebImageDownloaderResponseModifier> instance to modify the image download response. It's used for downloader to modify the original response from URL and options. If you provide one, it will ignore the `responseModifier` in downloader and use provided one instead. (id<SDWebImageDownloaderResponseModifier>) | |
| 302 | - */ | |
| 303 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextDownloadResponseModifier; | |
| 304 | - | |
| 305 | -/** | |
| 306 | - A id<SDWebImageContextDownloadDecryptor> instance to decrypt the image download data. This can be used for image data decryption, such as Base64 encoded image. If you provide one, it will ignore the `decryptor` in downloader and use provided one instead. (id<SDWebImageContextDownloadDecryptor>) | |
| 307 | - */ | |
| 308 | -FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextDownloadDecryptor; | |
| 309 | - | |
| 310 | -/** | |
| 311 | 237 | A id<SDWebImageCacheKeyFilter> instance to convert an URL into a cache key. It's used when manager need cache key to use image cache. If you provide one, it will ignore the `cacheKeyFilter` in manager and use provided one instead. (id<SDWebImageCacheKeyFilter>) |
| 312 | 238 | */ |
| 313 | 239 | FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCacheKeyFilter; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m
| ... | ... | @@ -9,7 +9,6 @@ |
| 9 | 9 | #import "SDWebImageDefine.h" |
| 10 | 10 | #import "UIImage+Metadata.h" |
| 11 | 11 | #import "NSImage+Compatibility.h" |
| 12 | -#import "SDAssociatedObject.h" | |
| 13 | 12 | |
| 14 | 13 | #pragma mark - Image scale |
| 15 | 14 | |
| ... | ... | @@ -111,7 +110,8 @@ inline UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage * |
| 111 | 110 | scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:kCGImagePropertyOrientationUp]; |
| 112 | 111 | #endif |
| 113 | 112 | } |
| 114 | - SDImageCopyAssociatedObject(image, scaledImage); | |
| 113 | + scaledImage.sd_isIncremental = image.sd_isIncremental; | |
| 114 | + scaledImage.sd_imageFormat = image.sd_imageFormat; | |
| 115 | 115 | |
| 116 | 116 | return scaledImage; |
| 117 | 117 | } |
| ... | ... | @@ -120,20 +120,11 @@ inline UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage * |
| 120 | 120 | |
| 121 | 121 | SDWebImageContextOption const SDWebImageContextSetImageOperationKey = @"setImageOperationKey"; |
| 122 | 122 | SDWebImageContextOption const SDWebImageContextCustomManager = @"customManager"; |
| 123 | -SDWebImageContextOption const SDWebImageContextImageCache = @"imageCache"; | |
| 124 | -SDWebImageContextOption const SDWebImageContextImageLoader = @"imageLoader"; | |
| 125 | -SDWebImageContextOption const SDWebImageContextImageCoder = @"imageCoder"; | |
| 126 | 123 | SDWebImageContextOption const SDWebImageContextImageTransformer = @"imageTransformer"; |
| 127 | 124 | SDWebImageContextOption const SDWebImageContextImageScaleFactor = @"imageScaleFactor"; |
| 128 | -SDWebImageContextOption const SDWebImageContextImagePreserveAspectRatio = @"imagePreserveAspectRatio"; | |
| 129 | -SDWebImageContextOption const SDWebImageContextImageThumbnailPixelSize = @"imageThumbnailPixelSize"; | |
| 130 | -SDWebImageContextOption const SDWebImageContextQueryCacheType = @"queryCacheType"; | |
| 131 | 125 | SDWebImageContextOption const SDWebImageContextStoreCacheType = @"storeCacheType"; |
| 132 | -SDWebImageContextOption const SDWebImageContextOriginalQueryCacheType = @"originalQueryCacheType"; | |
| 133 | 126 | SDWebImageContextOption const SDWebImageContextOriginalStoreCacheType = @"originalStoreCacheType"; |
| 134 | 127 | SDWebImageContextOption const SDWebImageContextAnimatedImageClass = @"animatedImageClass"; |
| 135 | 128 | SDWebImageContextOption const SDWebImageContextDownloadRequestModifier = @"downloadRequestModifier"; |
| 136 | -SDWebImageContextOption const SDWebImageContextDownloadResponseModifier = @"downloadResponseModifier"; | |
| 137 | -SDWebImageContextOption const SDWebImageContextDownloadDecryptor = @"downloadDecryptor"; | |
| 138 | 129 | SDWebImageContextOption const SDWebImageContextCacheKeyFilter = @"cacheKeyFilter"; |
| 139 | 130 | SDWebImageContextOption const SDWebImageContextCacheSerializer = @"cacheSerializer"; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h
| ... | ... | @@ -12,8 +12,6 @@ |
| 12 | 12 | #import "SDWebImageOperation.h" |
| 13 | 13 | #import "SDWebImageDownloaderConfig.h" |
| 14 | 14 | #import "SDWebImageDownloaderRequestModifier.h" |
| 15 | -#import "SDWebImageDownloaderResponseModifier.h" | |
| 16 | -#import "SDWebImageDownloaderDecryptor.h" | |
| 17 | 15 | #import "SDImageLoader.h" |
| 18 | 16 | |
| 19 | 17 | /// Downloader options |
| ... | ... | @@ -78,7 +76,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { |
| 78 | 76 | SDWebImageDownloaderAvoidDecodeImage = 1 << 9, |
| 79 | 77 | |
| 80 | 78 | /** |
| 81 | - * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. | |
| 79 | + * By default, we decode the animated image. This flag can force decode the first frame only and produece the static image. | |
| 82 | 80 | */ |
| 83 | 81 | SDWebImageDownloaderDecodeFirstFrameOnly = 1 << 10, |
| 84 | 82 | |
| ... | ... | @@ -128,11 +126,6 @@ typedef SDImageLoaderCompletedBlock SDWebImageDownloaderCompletedBlock; |
| 128 | 126 | */ |
| 129 | 127 | @property (nonatomic, strong, nullable, readonly) NSURLResponse *response; |
| 130 | 128 | |
| 131 | -/** | |
| 132 | - The download's metrics. This will be nil if download operation does not support metrics. | |
| 133 | - */ | |
| 134 | -@property (nonatomic, strong, nullable, readonly) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); | |
| 135 | - | |
| 136 | 129 | @end |
| 137 | 130 | |
| 138 | 131 | |
| ... | ... | @@ -149,30 +142,13 @@ typedef SDImageLoaderCompletedBlock SDWebImageDownloaderCompletedBlock; |
| 149 | 142 | |
| 150 | 143 | /** |
| 151 | 144 | * Set the request modifier to modify the original download request before image load. |
| 152 | - * This request modifier method will be called for each downloading image request. Return the original request means no modification. Return nil will cancel the download request. | |
| 145 | + * This request modifier method will be called for each downloading image request. Return the original request means no modication. Return nil will cancel the download request. | |
| 153 | 146 | * Defaults to nil, means does not modify the original download request. |
| 154 | 147 | * @note If you want to modify single request, consider using `SDWebImageContextDownloadRequestModifier` context option. |
| 155 | 148 | */ |
| 156 | 149 | @property (nonatomic, strong, nullable) id<SDWebImageDownloaderRequestModifier> requestModifier; |
| 157 | 150 | |
| 158 | 151 | /** |
| 159 | - * Set the response modifier to modify the original download response during image load. | |
| 160 | - * This request modifier method will be called for each downloading image response. Return the original response means no modification. Return nil will mark current download as cancelled. | |
| 161 | - * Defaults to nil, means does not modify the original download response. | |
| 162 | - * @note If you want to modify single response, consider using `SDWebImageContextDownloadResponseModifier` context option. | |
| 163 | - */ | |
| 164 | -@property (nonatomic, strong, nullable) id<SDWebImageDownloaderResponseModifier> responseModifier; | |
| 165 | - | |
| 166 | -/** | |
| 167 | - * Set the decryptor to decrypt the original download data before image decoding. This can be used for encrypted image data, like Base64. | |
| 168 | - * This decryptor method will be called for each downloading image data. Return the original data means no modification. Return nil will mark this download failed. | |
| 169 | - * Defaults to nil, means does not modify the original download data. | |
| 170 | - * @note When using decryptor, progressive decoding will be disabled, to avoid data corrupt issue. | |
| 171 | - * @note If you want to decrypt single download data, consider using `SDWebImageContextDownloadDecryptor` context option. | |
| 172 | - */ | |
| 173 | -@property (nonatomic, strong, nullable) id<SDWebImageDownloaderDecryptor> decryptor; | |
| 174 | - | |
| 175 | -/** | |
| 176 | 152 | * The configuration in use by the internal NSURLSession. If you want to provide a custom sessionConfiguration, use `SDWebImageDownloaderConfig.sessionConfiguration` and create a new downloader instance. |
| 177 | 153 | @note This is immutable according to NSURLSession's documentation. Mutating this object directly has no effect. |
| 178 | 154 | */ | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m
| ... | ... | @@ -24,7 +24,6 @@ static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; |
| 24 | 24 | @property (nonatomic, strong, nullable, readwrite) NSURL *url; |
| 25 | 25 | @property (nonatomic, strong, nullable, readwrite) NSURLRequest *request; |
| 26 | 26 | @property (nonatomic, strong, nullable, readwrite) NSURLResponse *response; |
| 27 | -@property (nonatomic, strong, nullable, readwrite) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); | |
| 28 | 27 | @property (nonatomic, weak, nullable, readwrite) id downloadOperationCancelToken; |
| 29 | 28 | @property (nonatomic, weak, nullable) NSOperation<SDWebImageDownloaderOperation> *downloadOperation; |
| 30 | 29 | @property (nonatomic, assign, getter=isCancelled) BOOL cancelled; |
| ... | ... | @@ -227,11 +226,10 @@ static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; |
| 227 | 226 | SD_UNLOCK(self.operationsLock); |
| 228 | 227 | }; |
| 229 | 228 | self.URLOperations[url] = operation; |
| 230 | - // Add the handlers before submitting to operation queue, avoid the race condition that operation finished before setting handlers. | |
| 231 | - downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock]; | |
| 232 | 229 | // Add operation to operation queue only after all configuration done according to Apple's doc. |
| 233 | 230 | // `addOperation:` does not synchronously execute the `operation.completionBlock` so this will not cause deadlock. |
| 234 | 231 | [self.downloadQueue addOperation:operation]; |
| 232 | + downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock]; | |
| 235 | 233 | } else { |
| 236 | 234 | // When we reuse the download operation to attach more callbacks, there may be thread safe issue because the getter of callbacks may in another queue (decoding queue or delegate queue) |
| 237 | 235 | // So we lock the operation here, and in `SDWebImageDownloaderOperation`, we use `@synchonzied (self)`, to ensure the thread safe between these two classes. |
| ... | ... | @@ -274,16 +272,6 @@ static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; |
| 274 | 272 | SD_LOCK(self.HTTPHeadersLock); |
| 275 | 273 | mutableRequest.allHTTPHeaderFields = self.HTTPHeaders; |
| 276 | 274 | SD_UNLOCK(self.HTTPHeadersLock); |
| 277 | - | |
| 278 | - // Context Option | |
| 279 | - SDWebImageMutableContext *mutableContext; | |
| 280 | - if (context) { | |
| 281 | - mutableContext = [context mutableCopy]; | |
| 282 | - } else { | |
| 283 | - mutableContext = [NSMutableDictionary dictionary]; | |
| 284 | - } | |
| 285 | - | |
| 286 | - // Request Modifier | |
| 287 | 275 | id<SDWebImageDownloaderRequestModifier> requestModifier; |
| 288 | 276 | if ([context valueForKey:SDWebImageContextDownloadRequestModifier]) { |
| 289 | 277 | requestModifier = [context valueForKey:SDWebImageContextDownloadRequestModifier]; |
| ... | ... | @@ -303,30 +291,6 @@ static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; |
| 303 | 291 | } else { |
| 304 | 292 | request = [mutableRequest copy]; |
| 305 | 293 | } |
| 306 | - // Response Modifier | |
| 307 | - id<SDWebImageDownloaderResponseModifier> responseModifier; | |
| 308 | - if ([context valueForKey:SDWebImageContextDownloadResponseModifier]) { | |
| 309 | - responseModifier = [context valueForKey:SDWebImageContextDownloadResponseModifier]; | |
| 310 | - } else { | |
| 311 | - responseModifier = self.responseModifier; | |
| 312 | - } | |
| 313 | - if (responseModifier) { | |
| 314 | - mutableContext[SDWebImageContextDownloadResponseModifier] = responseModifier; | |
| 315 | - } | |
| 316 | - // Decryptor | |
| 317 | - id<SDWebImageDownloaderDecryptor> decryptor; | |
| 318 | - if ([context valueForKey:SDWebImageContextDownloadDecryptor]) { | |
| 319 | - decryptor = [context valueForKey:SDWebImageContextDownloadDecryptor]; | |
| 320 | - } else { | |
| 321 | - decryptor = self.decryptor; | |
| 322 | - } | |
| 323 | - if (decryptor) { | |
| 324 | - mutableContext[SDWebImageContextDownloadDecryptor] = decryptor; | |
| 325 | - } | |
| 326 | - | |
| 327 | - context = [mutableContext copy]; | |
| 328 | - | |
| 329 | - // Operation Class | |
| 330 | 294 | Class operationClass = self.config.operationClass; |
| 331 | 295 | if (operationClass && [operationClass isSubclassOfClass:[NSOperation class]] && [operationClass conformsToProtocol:@protocol(SDWebImageDownloaderOperation)]) { |
| 332 | 296 | // Custom operation class |
| ... | ... | @@ -405,12 +369,7 @@ static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; |
| 405 | 369 | NSOperation<SDWebImageDownloaderOperation> *returnOperation = nil; |
| 406 | 370 | for (NSOperation<SDWebImageDownloaderOperation> *operation in self.downloadQueue.operations) { |
| 407 | 371 | if ([operation respondsToSelector:@selector(dataTask)]) { |
| 408 | - // So we lock the operation here, and in `SDWebImageDownloaderOperation`, we use `@synchonzied (self)`, to ensure the thread safe between these two classes. | |
| 409 | - NSURLSessionTask *operationTask; | |
| 410 | - @synchronized (operation) { | |
| 411 | - operationTask = operation.dataTask; | |
| 412 | - } | |
| 413 | - if (operationTask.taskIdentifier == task.taskIdentifier) { | |
| 372 | + if (operation.dataTask.taskIdentifier == task.taskIdentifier) { | |
| 414 | 373 | returnOperation = operation; |
| 415 | 374 | break; |
| 416 | 375 | } |
| ... | ... | @@ -499,52 +458,30 @@ didReceiveResponse:(NSURLResponse *)response |
| 499 | 458 | } |
| 500 | 459 | } |
| 501 | 460 | |
| 502 | -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { | |
| 503 | - | |
| 504 | - // Identify the operation that runs this task and pass it the delegate method | |
| 505 | - NSOperation<SDWebImageDownloaderOperation> *dataOperation = [self operationWithTask:task]; | |
| 506 | - if ([dataOperation respondsToSelector:@selector(URLSession:task:didFinishCollectingMetrics:)]) { | |
| 507 | - [dataOperation URLSession:session task:task didFinishCollectingMetrics:metrics]; | |
| 508 | - } | |
| 509 | -} | |
| 510 | - | |
| 511 | 461 | @end |
| 512 | 462 | |
| 513 | 463 | @implementation SDWebImageDownloadToken |
| 514 | 464 | |
| 515 | 465 | - (void)dealloc { |
| 516 | 466 | [[NSNotificationCenter defaultCenter] removeObserver:self name:SDWebImageDownloadReceiveResponseNotification object:nil]; |
| 517 | - [[NSNotificationCenter defaultCenter] removeObserver:self name:SDWebImageDownloadStopNotification object:nil]; | |
| 518 | 467 | } |
| 519 | 468 | |
| 520 | 469 | - (instancetype)initWithDownloadOperation:(NSOperation<SDWebImageDownloaderOperation> *)downloadOperation { |
| 521 | 470 | self = [super init]; |
| 522 | 471 | if (self) { |
| 523 | 472 | _downloadOperation = downloadOperation; |
| 524 | - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadDidReceiveResponse:) name:SDWebImageDownloadReceiveResponseNotification object:downloadOperation]; | |
| 525 | - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadDidStop:) name:SDWebImageDownloadStopNotification object:downloadOperation]; | |
| 473 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadReceiveResponse:) name:SDWebImageDownloadReceiveResponseNotification object:downloadOperation]; | |
| 526 | 474 | } |
| 527 | 475 | return self; |
| 528 | 476 | } |
| 529 | 477 | |
| 530 | -- (void)downloadDidReceiveResponse:(NSNotification *)notification { | |
| 478 | +- (void)downloadReceiveResponse:(NSNotification *)notification { | |
| 531 | 479 | NSOperation<SDWebImageDownloaderOperation> *downloadOperation = notification.object; |
| 532 | 480 | if (downloadOperation && downloadOperation == self.downloadOperation) { |
| 533 | 481 | self.response = downloadOperation.response; |
| 534 | 482 | } |
| 535 | 483 | } |
| 536 | 484 | |
| 537 | -- (void)downloadDidStop:(NSNotification *)notification { | |
| 538 | - NSOperation<SDWebImageDownloaderOperation> *downloadOperation = notification.object; | |
| 539 | - if (downloadOperation && downloadOperation == self.downloadOperation) { | |
| 540 | - if ([downloadOperation respondsToSelector:@selector(metrics)]) { | |
| 541 | - if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, watchOS 3.0, *)) { | |
| 542 | - self.metrics = downloadOperation.metrics; | |
| 543 | - } | |
| 544 | - } | |
| 545 | - } | |
| 546 | -} | |
| 547 | - | |
| 548 | 485 | - (void)cancel { |
| 549 | 486 | @synchronized (self) { |
| 550 | 487 | if (self.isCancelled) { | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h
| ... | ... | @@ -36,7 +36,6 @@ |
| 36 | 36 | |
| 37 | 37 | @optional |
| 38 | 38 | @property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask; |
| 39 | -@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); | |
| 40 | 39 | @property (strong, nonatomic, nullable) NSURLCredential *credential; |
| 41 | 40 | @property (assign, nonatomic) double minimumProgressInterval; |
| 42 | 41 | |
| ... | ... | @@ -64,12 +63,6 @@ |
| 64 | 63 | @property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask; |
| 65 | 64 | |
| 66 | 65 | /** |
| 67 | - * The collected metrics from `-URLSession:task:didFinishCollectingMetrics:`. | |
| 68 | - * This can be used to collect the network metrics like download duration, DNS lookup duration, SSL handshake duration, etc. See Apple's documentation: https://developer.apple.com/documentation/foundation/urlsessiontaskmetrics | |
| 69 | - */ | |
| 70 | -@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); | |
| 71 | - | |
| 72 | -/** | |
| 73 | 66 | * The credential used for authentication challenges in `-URLSession:task:didReceiveChallenge:completionHandler:`. |
| 74 | 67 | * |
| 75 | 68 | * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m
| ... | ... | @@ -9,8 +9,6 @@ |
| 9 | 9 | #import "SDWebImageDownloaderOperation.h" |
| 10 | 10 | #import "SDWebImageError.h" |
| 11 | 11 | #import "SDInternalMacros.h" |
| 12 | -#import "SDWebImageDownloaderResponseModifier.h" | |
| 13 | -#import "SDWebImageDownloaderDecryptor.h" | |
| 14 | 12 | |
| 15 | 13 | // iOS 8 Foundation.framework extern these symbol but the define is in CFNetwork.framework. We just fix this without import CFNetwork.framework |
| 16 | 14 | #if ((__IPHONE_OS_VERSION_MIN_REQUIRED && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) || (__MAC_OS_X_VERSION_MIN_REQUIRED && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_11)) |
| ... | ... | @@ -41,9 +39,6 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 41 | 39 | @property (strong, nonatomic, nullable) NSError *responseError; |
| 42 | 40 | @property (assign, nonatomic) double previousProgress; // previous progress percent |
| 43 | 41 | |
| 44 | -@property (strong, nonatomic, nullable) id<SDWebImageDownloaderResponseModifier> responseModifier; // modify original URLResponse | |
| 45 | -@property (strong, nonatomic, nullable) id<SDWebImageDownloaderDecryptor> decryptor; // decrypt image data | |
| 46 | - | |
| 47 | 42 | // This is weak because it is injected by whoever manages this session. If this gets nil-ed out, we won't be able to run |
| 48 | 43 | // the task associated with this operation |
| 49 | 44 | @property (weak, nonatomic, nullable) NSURLSession *unownedSession; |
| ... | ... | @@ -52,9 +47,7 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 52 | 47 | |
| 53 | 48 | @property (strong, nonatomic, readwrite, nullable) NSURLSessionTask *dataTask; |
| 54 | 49 | |
| 55 | -@property (strong, nonatomic, readwrite, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); | |
| 56 | - | |
| 57 | -@property (strong, nonatomic, nonnull) NSOperationQueue *coderQueue; // the serial operation queue to do image decoding | |
| 50 | +@property (strong, nonatomic, nonnull) dispatch_queue_t coderQueue; // the queue to do image decoding | |
| 58 | 51 | #if SD_UIKIT |
| 59 | 52 | @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId; |
| 60 | 53 | #endif |
| ... | ... | @@ -83,14 +76,11 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 83 | 76 | _options = options; |
| 84 | 77 | _context = [context copy]; |
| 85 | 78 | _callbackBlocks = [NSMutableArray new]; |
| 86 | - _responseModifier = context[SDWebImageContextDownloadResponseModifier]; | |
| 87 | - _decryptor = context[SDWebImageContextDownloadDecryptor]; | |
| 88 | 79 | _executing = NO; |
| 89 | 80 | _finished = NO; |
| 90 | 81 | _expectedSize = 0; |
| 91 | 82 | _unownedSession = session; |
| 92 | - _coderQueue = [NSOperationQueue new]; | |
| 93 | - _coderQueue.maxConcurrentOperationCount = 1; | |
| 83 | + _coderQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderOperationCoderQueue", DISPATCH_QUEUE_SERIAL); | |
| 94 | 84 | #if SD_UIKIT |
| 95 | 85 | _backgroundTaskId = UIBackgroundTaskInvalid; |
| 96 | 86 | #endif |
| ... | ... | @@ -141,7 +131,7 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 141 | 131 | SDWebImageDownloaderCompletedBlock completedBlock = [token valueForKey:kCompletedCallbackKey]; |
| 142 | 132 | dispatch_main_async_safe(^{ |
| 143 | 133 | if (completedBlock) { |
| 144 | - completedBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during sending the request"}], YES); | |
| 134 | + completedBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil], YES); | |
| 145 | 135 | } |
| 146 | 136 | }); |
| 147 | 137 | } |
| ... | ... | @@ -153,7 +143,7 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 153 | 143 | if (self.isCancelled) { |
| 154 | 144 | self.finished = YES; |
| 155 | 145 | // Operation cancelled by user before sending the request |
| 156 | - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user before sending the request"}]]; | |
| 146 | + [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil]]; | |
| 157 | 147 | [self reset]; |
| 158 | 148 | return; |
| 159 | 149 | } |
| ... | ... | @@ -208,13 +198,8 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 208 | 198 | if (self.dataTask) { |
| 209 | 199 | if (self.options & SDWebImageDownloaderHighPriority) { |
| 210 | 200 | self.dataTask.priority = NSURLSessionTaskPriorityHigh; |
| 211 | - self.coderQueue.qualityOfService = NSQualityOfServiceUserInteractive; | |
| 212 | 201 | } else if (self.options & SDWebImageDownloaderLowPriority) { |
| 213 | 202 | self.dataTask.priority = NSURLSessionTaskPriorityLow; |
| 214 | - self.coderQueue.qualityOfService = NSQualityOfServiceBackground; | |
| 215 | - } else { | |
| 216 | - self.dataTask.priority = NSURLSessionTaskPriorityDefault; | |
| 217 | - self.coderQueue.qualityOfService = NSQualityOfServiceDefault; | |
| 218 | 203 | } |
| 219 | 204 | [self.dataTask resume]; |
| 220 | 205 | for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { |
| ... | ... | @@ -251,10 +236,9 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 251 | 236 | // maintain the isFinished and isExecuting flags. |
| 252 | 237 | if (self.isExecuting) self.executing = NO; |
| 253 | 238 | if (!self.isFinished) self.finished = YES; |
| 254 | - } else { | |
| 255 | - // Operation cancelled by user during sending the request | |
| 256 | - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during sending the request"}]]; | |
| 257 | 239 | } |
| 240 | + // Operation cancelled by user before sending the request | |
| 241 | + [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil]]; | |
| 258 | 242 | |
| 259 | 243 | [self reset]; |
| 260 | 244 | } |
| ... | ... | @@ -309,34 +293,20 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary; |
| 309 | 293 | didReceiveResponse:(NSURLResponse *)response |
| 310 | 294 | completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { |
| 311 | 295 | NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; |
| 312 | - | |
| 313 | - // Check response modifier, if return nil, will marked as cancelled. | |
| 314 | - BOOL valid = YES; | |
| 315 | - if (self.responseModifier && response) { | |
| 316 | - response = [self.responseModifier modifiedResponseWithResponse:response]; | |
| 317 | - if (!response) { | |
| 318 | - valid = NO; | |
| 319 | - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadResponse userInfo:@{NSLocalizedDescriptionKey : @"Download marked as failed because response is nil"}]; | |
| 320 | - } | |
| 321 | - } | |
| 322 | - | |
| 323 | 296 | NSInteger expected = (NSInteger)response.expectedContentLength; |
| 324 | 297 | expected = expected > 0 ? expected : 0; |
| 325 | 298 | self.expectedSize = expected; |
| 326 | 299 | self.response = response; |
| 327 | - | |
| 328 | 300 | NSInteger statusCode = [response respondsToSelector:@selector(statusCode)] ? ((NSHTTPURLResponse *)response).statusCode : 200; |
| 329 | - // Status code should between [200,400) | |
| 330 | - BOOL statusCodeValid = statusCode >= 200 && statusCode < 400; | |
| 331 | - if (!statusCodeValid) { | |
| 332 | - valid = NO; | |
| 333 | - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadStatusCode userInfo:@{NSLocalizedDescriptionKey : @"Download marked as failed because response status code is not in 200-400", SDWebImageErrorDownloadStatusCodeKey : @(statusCode)}]; | |
| 301 | + BOOL valid = statusCode >= 200 && statusCode < 400; | |
| 302 | + if (!valid) { | |
| 303 | + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidDownloadStatusCode userInfo:@{SDWebImageErrorDownloadStatusCodeKey : @(statusCode)}]; | |
| 334 | 304 | } |
| 335 | 305 | //'304 Not Modified' is an exceptional one |
| 336 | 306 | //URLSession current behavior will return 200 status code when the server respond 304 and URLCache hit. But this is not a standard behavior and we just add a check |
| 337 | 307 | if (statusCode == 304 && !self.cachedData) { |
| 338 | 308 | valid = NO; |
| 339 | - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCacheNotModified userInfo:@{NSLocalizedDescriptionKey : @"Download response status code is 304 not modified and ignored"}]; | |
| 309 | + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCacheNotModified userInfo:nil]; | |
| 340 | 310 | } |
| 341 | 311 | |
| 342 | 312 | if (valid) { |
| ... | ... | @@ -383,25 +353,22 @@ didReceiveResponse:(NSURLResponse *)response |
| 383 | 353 | return; |
| 384 | 354 | } |
| 385 | 355 | self.previousProgress = currentProgress; |
| 386 | - | |
| 387 | - // Using data decryptor will disable the progressive decoding, since there are no support for progressive decrypt | |
| 388 | - BOOL supportProgressive = (self.options & SDWebImageDownloaderProgressiveLoad) && !self.decryptor; | |
| 389 | - if (supportProgressive) { | |
| 356 | + | |
| 357 | + if (self.options & SDWebImageDownloaderProgressiveLoad) { | |
| 390 | 358 | // Get the image data |
| 391 | 359 | NSData *imageData = [self.imageData copy]; |
| 392 | 360 | |
| 393 | - // keep maximum one progressive decode process during download | |
| 394 | - if (self.coderQueue.operationCount == 0) { | |
| 395 | - // NSOperation have autoreleasepool, don't need to create extra one | |
| 396 | - [self.coderQueue addOperationWithBlock:^{ | |
| 361 | + // progressive decode the image in coder queue | |
| 362 | + dispatch_async(self.coderQueue, ^{ | |
| 363 | + @autoreleasepool { | |
| 397 | 364 | UIImage *image = SDImageLoaderDecodeProgressiveImageData(imageData, self.request.URL, finished, self, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context); |
| 398 | 365 | if (image) { |
| 399 | 366 | // We do not keep the progressive decoding image even when `finished`=YES. Because they are for view rendering but not take full function from downloader options. And some coders implementation may not keep consistent between progressive decoding and normal decoding. |
| 400 | 367 | |
| 401 | 368 | [self callCompletionBlocksWithImage:image imageData:nil error:nil finished:NO]; |
| 402 | 369 | } |
| 403 | - }]; | |
| 404 | - } | |
| 370 | + } | |
| 371 | + }); | |
| 405 | 372 | } |
| 406 | 373 | |
| 407 | 374 | for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { |
| ... | ... | @@ -454,33 +421,29 @@ didReceiveResponse:(NSURLResponse *)response |
| 454 | 421 | if ([self callbacksForKey:kCompletedCallbackKey].count > 0) { |
| 455 | 422 | NSData *imageData = [self.imageData copy]; |
| 456 | 423 | self.imageData = nil; |
| 457 | - // data decryptor | |
| 458 | - if (imageData && self.decryptor) { | |
| 459 | - imageData = [self.decryptor decryptedDataWithData:imageData response:self.response]; | |
| 460 | - } | |
| 461 | 424 | if (imageData) { |
| 462 | 425 | /** if you specified to only use cached data via `SDWebImageDownloaderIgnoreCachedResponse`, |
| 463 | 426 | * then we should check if the cached data is equal to image data |
| 464 | 427 | */ |
| 465 | 428 | if (self.options & SDWebImageDownloaderIgnoreCachedResponse && [self.cachedData isEqualToData:imageData]) { |
| 466 | - self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCacheNotModified userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image is not modified and ignored"}]; | |
| 429 | + self.responseError = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCacheNotModified userInfo:nil]; | |
| 467 | 430 | // call completion block with not modified error |
| 468 | 431 | [self callCompletionBlocksWithError:self.responseError]; |
| 469 | 432 | [self done]; |
| 470 | 433 | } else { |
| 471 | - // decode the image in coder queue, cancel all previous decoding process | |
| 472 | - [self.coderQueue cancelAllOperations]; | |
| 473 | - [self.coderQueue addOperationWithBlock:^{ | |
| 474 | - UIImage *image = SDImageLoaderDecodeImageData(imageData, self.request.URL, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context); | |
| 475 | - CGSize imageSize = image.size; | |
| 476 | - if (imageSize.width == 0 || imageSize.height == 0) { | |
| 477 | - NSString *description = image == nil ? @"Downloaded image decode failed" : @"Downloaded image has 0 pixels"; | |
| 478 | - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : description}]]; | |
| 479 | - } else { | |
| 480 | - [self callCompletionBlocksWithImage:image imageData:imageData error:nil finished:YES]; | |
| 434 | + // decode the image in coder queue | |
| 435 | + dispatch_async(self.coderQueue, ^{ | |
| 436 | + @autoreleasepool { | |
| 437 | + UIImage *image = SDImageLoaderDecodeImageData(imageData, self.request.URL, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context); | |
| 438 | + CGSize imageSize = image.size; | |
| 439 | + if (imageSize.width == 0 || imageSize.height == 0) { | |
| 440 | + [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}]]; | |
| 441 | + } else { | |
| 442 | + [self callCompletionBlocksWithImage:image imageData:imageData error:nil finished:YES]; | |
| 443 | + } | |
| 444 | + [self done]; | |
| 481 | 445 | } |
| 482 | - [self done]; | |
| 483 | - }]; | |
| 446 | + }); | |
| 484 | 447 | } |
| 485 | 448 | } else { |
| 486 | 449 | [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}]]; |
| ... | ... | @@ -522,10 +485,6 @@ didReceiveResponse:(NSURLResponse *)response |
| 522 | 485 | } |
| 523 | 486 | } |
| 524 | 487 | |
| 525 | -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { | |
| 526 | - self.metrics = metrics; | |
| 527 | -} | |
| 528 | - | |
| 529 | 488 | #pragma mark Helper methods |
| 530 | 489 | + (SDWebImageOptions)imageOptionsFromDownloaderOptions:(SDWebImageDownloaderOptions)downloadOptions { |
| 531 | 490 | SDWebImageOptions options = 0; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h
| ... | ... | @@ -17,9 +17,6 @@ typedef NSURLRequest * _Nullable (^SDWebImageDownloaderRequestModifierBlock)(NSU |
| 17 | 17 | */ |
| 18 | 18 | @protocol SDWebImageDownloaderRequestModifier <NSObject> |
| 19 | 19 | |
| 20 | -/// Modify the original URL request and return a new one instead. You can modify the HTTP header, cachePolicy, etc for this URL. | |
| 21 | -/// @param request The original URL request for image loading | |
| 22 | -/// @note If return nil, the URL request will be cancelled. | |
| 23 | 20 | - (nullable NSURLRequest *)modifiedRequestWithRequest:(nonnull NSURLRequest *)request; |
| 24 | 21 | |
| 25 | 22 | @end |
| ... | ... | @@ -29,41 +26,7 @@ typedef NSURLRequest * _Nullable (^SDWebImageDownloaderRequestModifierBlock)(NSU |
| 29 | 26 | */ |
| 30 | 27 | @interface SDWebImageDownloaderRequestModifier : NSObject <SDWebImageDownloaderRequestModifier> |
| 31 | 28 | |
| 32 | -/// Create the request modifier with block | |
| 33 | -/// @param block A block to control modifier logic | |
| 34 | 29 | - (nonnull instancetype)initWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block; |
| 35 | - | |
| 36 | -/// Create the request modifier with block | |
| 37 | -/// @param block A block to control modifier logic | |
| 38 | 30 | + (nonnull instancetype)requestModifierWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block; |
| 39 | 31 | |
| 40 | 32 | @end |
| 41 | - | |
| 42 | -/** | |
| 43 | -A convenient request modifier to provide the HTTP request including HTTP Method, Headers and Body. | |
| 44 | -*/ | |
| 45 | -@interface SDWebImageDownloaderRequestModifier (Conveniences) | |
| 46 | - | |
| 47 | -/// Create the request modifier with HTTP Method. | |
| 48 | -/// @param method HTTP Method, nil means to GET. | |
| 49 | -/// @note This is for convenience, if you need code to control the logic, use block API instead. | |
| 50 | -- (nonnull instancetype)initWithMethod:(nullable NSString *)method; | |
| 51 | - | |
| 52 | -/// Create the request modifier with HTTP Headers. | |
| 53 | -/// @param headers HTTP Headers. Case insensitive according to HTTP/1.1(HTTP/2) standard. The headers will override the same fields from original request. | |
| 54 | -/// @note This is for convenience, if you need code to control the logic, use block API instead. | |
| 55 | -- (nonnull instancetype)initWithHeaders:(nullable NSDictionary<NSString *, NSString *> *)headers; | |
| 56 | - | |
| 57 | -/// Create the request modifier with HTTP Body. | |
| 58 | -/// @param body HTTP Body. | |
| 59 | -/// @note This is for convenience, if you need code to control the logic, use block API instead. | |
| 60 | -- (nonnull instancetype)initWithBody:(nullable NSData *)body; | |
| 61 | - | |
| 62 | -/// Create the request modifier with HTTP Method, Headers and Body. | |
| 63 | -/// @param method HTTP Method, nil means to GET. | |
| 64 | -/// @param headers HTTP Headers. Case insensitive according to HTTP/1.1(HTTP/2) standard. The headers will override the same fields from original request. | |
| 65 | -/// @param body HTTP Body. | |
| 66 | -/// @note This is for convenience, if you need code to control the logic, use block API instead. | |
| 67 | -- (nonnull instancetype)initWithMethod:(nullable NSString *)method headers:(nullable NSDictionary<NSString *, NSString *> *)headers body:(nullable NSData *)body; | |
| 68 | - | |
| 69 | -@end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m
| ... | ... | @@ -37,35 +37,3 @@ |
| 37 | 37 | } |
| 38 | 38 | |
| 39 | 39 | @end |
| 40 | - | |
| 41 | -@implementation SDWebImageDownloaderRequestModifier (Conveniences) | |
| 42 | - | |
| 43 | -- (instancetype)initWithMethod:(NSString *)method { | |
| 44 | - return [self initWithMethod:method headers:nil body:nil]; | |
| 45 | -} | |
| 46 | - | |
| 47 | -- (instancetype)initWithHeaders:(NSDictionary<NSString *,NSString *> *)headers { | |
| 48 | - return [self initWithMethod:nil headers:headers body:nil]; | |
| 49 | -} | |
| 50 | - | |
| 51 | -- (instancetype)initWithBody:(NSData *)body { | |
| 52 | - return [self initWithMethod:nil headers:nil body:body]; | |
| 53 | -} | |
| 54 | - | |
| 55 | -- (instancetype)initWithMethod:(NSString *)method headers:(NSDictionary<NSString *,NSString *> *)headers body:(NSData *)body { | |
| 56 | - method = method ? [method copy] : @"GET"; | |
| 57 | - headers = [headers copy]; | |
| 58 | - body = [body copy]; | |
| 59 | - return [self initWithBlock:^NSURLRequest * _Nullable(NSURLRequest * _Nonnull request) { | |
| 60 | - NSMutableURLRequest *mutableRequest = [request mutableCopy]; | |
| 61 | - mutableRequest.HTTPMethod = method; | |
| 62 | - mutableRequest.HTTPBody = body; | |
| 63 | - for (NSString *header in headers) { | |
| 64 | - NSString *value = headers[header]; | |
| 65 | - [mutableRequest setValue:value forHTTPHeaderField:header]; | |
| 66 | - } | |
| 67 | - return [mutableRequest copy]; | |
| 68 | - }]; | |
| 69 | -} | |
| 70 | - | |
| 71 | -@end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h
| ... | ... | @@ -19,9 +19,7 @@ typedef NS_ERROR_ENUM(SDWebImageErrorDomain, SDWebImageError) { |
| 19 | 19 | SDWebImageErrorInvalidURL = 1000, // The URL is invalid, such as nil URL or corrupted URL |
| 20 | 20 | SDWebImageErrorBadImageData = 1001, // The image data can not be decoded to image, or the image data is empty |
| 21 | 21 | SDWebImageErrorCacheNotModified = 1002, // The remote location specify that the cached image is not modified, such as the HTTP response 304 code. It's useful for `SDWebImageRefreshCached` |
| 22 | - SDWebImageErrorBlackListed = 1003, // The URL is blacklisted because of unrecoverable failure marked by downloader (such as 404), you can use `.retryFailed` option to avoid this | |
| 23 | 22 | SDWebImageErrorInvalidDownloadOperation = 2000, // The image download operation is invalid, such as nil operation or unexpected error occur when operation initialized |
| 24 | 23 | SDWebImageErrorInvalidDownloadStatusCode = 2001, // The image download response a invalid status code. You can check the status code in error's userInfo under `SDWebImageErrorDownloadStatusCodeKey` |
| 25 | 24 | SDWebImageErrorCancelled = 2002, // The image loading operation is cancelled before finished, during either async disk cache query, or waiting before actual network request. For actual network request error, check `NSURLErrorDomain` error domain and code. |
| 26 | - SDWebImageErrorInvalidDownloadResponse = 2003, // When using response modifier, the modified download response is nil and marked as failed. | |
| 27 | 25 | }; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.h
| ... | ... | @@ -87,7 +87,7 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; |
| 87 | 87 | [manager loadImageWithURL:imageURL |
| 88 | 88 | options:0 |
| 89 | 89 | progress:nil |
| 90 | - completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { | |
| 90 | + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { | |
| 91 | 91 | if (image) { |
| 92 | 92 | // do something with image |
| 93 | 93 | } |
| ... | ... | @@ -98,7 +98,7 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; |
| 98 | 98 | @interface SDWebImageManager : NSObject |
| 99 | 99 | |
| 100 | 100 | /** |
| 101 | - * The delegate for manager. Defaults to nil. | |
| 101 | + * The delegate for manager. Defatuls to nil. | |
| 102 | 102 | */ |
| 103 | 103 | @property (weak, nonatomic, nullable) id <SDWebImageManagerDelegate> delegate; |
| 104 | 104 | |
| ... | ... | @@ -136,8 +136,8 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; |
| 136 | 136 | |
| 137 | 137 | /** |
| 138 | 138 | * The cache serializer is used to convert the decoded image, the source downloaded data, to the actual data used for storing to the disk cache. If you return nil, means to generate the data from the image instance, see `SDImageCache`. |
| 139 | - * For example, if you are using WebP images and facing the slow decoding time issue when later retrieving from disk cache again. You can try to encode the decoded image to JPEG/PNG format to disk cache instead of source downloaded data. | |
| 140 | - * @note The `image` arg is nonnull, but when you also provide an image transformer and the image is transformed, the `data` arg may be nil, take attention to this case. | |
| 139 | + * For example, if you are using WebP images and facing the slow decoding time issue when later retriving from disk cache again. You can try to encode the decoded image to JPEG/PNG format to disk cache instead of source downloaded data. | |
| 140 | + * @note The `image` arg is nonnull, but when you also provide a image transformer and the image is transformed, the `data` arg may be nil, take attention to this case. | |
| 141 | 141 | * @note This method is called from a global queue in order to not to block the main thread. |
| 142 | 142 | * @code |
| 143 | 143 | SDWebImageManager.sharedManager.cacheSerializer = [SDWebImageCacheSerializer cacheSerializerWithBlock:^NSData * _Nullable(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL) { |
| ... | ... | @@ -225,7 +225,7 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; |
| 225 | 225 | * The forth parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache |
| 226 | 226 | * or from the memory cache or from the network. |
| 227 | 227 | * |
| 228 | - * The fifth parameter is set to NO when the SDWebImageProgressiveLoad option is used and the image is | |
| 228 | + * The fith parameter is set to NO when the SDWebImageProgressiveLoad option is used and the image is | |
| 229 | 229 | * downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the |
| 230 | 230 | * block is called a last time with the full image and the last parameter set to YES. |
| 231 | 231 | * |
| ... | ... | @@ -262,26 +262,8 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; |
| 262 | 262 | - (void)cancelAll; |
| 263 | 263 | |
| 264 | 264 | /** |
| 265 | - * Remove the specify URL from failed black list. | |
| 266 | - * @param url The failed URL. | |
| 267 | - */ | |
| 268 | -- (void)removeFailedURL:(nonnull NSURL *)url; | |
| 269 | - | |
| 270 | -/** | |
| 271 | - * Remove all the URL from failed black list. | |
| 272 | - */ | |
| 273 | -- (void)removeAllFailedURLs; | |
| 274 | - | |
| 275 | -/** | |
| 276 | - * Return the cache key for a given URL, does not considerate transformer or thumbnail. | |
| 277 | - * @note This method does not have context option, only use the url and manager level cacheKeyFilter to generate the cache key. | |
| 265 | + * Return the cache key for a given URL | |
| 278 | 266 | */ |
| 279 | 267 | - (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url; |
| 280 | 268 | |
| 281 | -/** | |
| 282 | - * Return the cache key for a given URL and context option. | |
| 283 | - * @note The context option like `.thumbnailPixelSize` and `.imageTransformer` will effect the generated cache key, using this if you have those context associated. | |
| 284 | -*/ | |
| 285 | -- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context; | |
| 286 | - | |
| 287 | 269 | @end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m
| ... | ... | @@ -10,7 +10,6 @@ |
| 10 | 10 | #import "SDImageCache.h" |
| 11 | 11 | #import "SDWebImageDownloader.h" |
| 12 | 12 | #import "UIImage+Metadata.h" |
| 13 | -#import "SDAssociatedObject.h" | |
| 14 | 13 | #import "SDWebImageError.h" |
| 15 | 14 | #import "SDInternalMacros.h" |
| 16 | 15 | |
| ... | ... | @@ -95,69 +94,19 @@ static id<SDImageLoader> _defaultImageLoader; |
| 95 | 94 | } |
| 96 | 95 | |
| 97 | 96 | - (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url { |
| 98 | - if (!url) { | |
| 99 | - return @""; | |
| 100 | - } | |
| 101 | - | |
| 102 | - NSString *key; | |
| 103 | - // Cache Key Filter | |
| 104 | - id<SDWebImageCacheKeyFilter> cacheKeyFilter = self.cacheKeyFilter; | |
| 105 | - if (cacheKeyFilter) { | |
| 106 | - key = [cacheKeyFilter cacheKeyForURL:url]; | |
| 107 | - } else { | |
| 108 | - key = url.absoluteString; | |
| 109 | - } | |
| 110 | - | |
| 111 | - return key; | |
| 97 | + return [self cacheKeyForURL:url cacheKeyFilter:self.cacheKeyFilter]; | |
| 112 | 98 | } |
| 113 | 99 | |
| 114 | -- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url context:(nullable SDWebImageContext *)context { | |
| 100 | +- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url cacheKeyFilter:(id<SDWebImageCacheKeyFilter>)cacheKeyFilter { | |
| 115 | 101 | if (!url) { |
| 116 | 102 | return @""; |
| 117 | 103 | } |
| 118 | - | |
| 119 | - NSString *key; | |
| 120 | - // Cache Key Filter | |
| 121 | - id<SDWebImageCacheKeyFilter> cacheKeyFilter = self.cacheKeyFilter; | |
| 122 | - if (context[SDWebImageContextCacheKeyFilter]) { | |
| 123 | - cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; | |
| 124 | - } | |
| 104 | + | |
| 125 | 105 | if (cacheKeyFilter) { |
| 126 | - key = [cacheKeyFilter cacheKeyForURL:url]; | |
| 106 | + return [cacheKeyFilter cacheKeyForURL:url]; | |
| 127 | 107 | } else { |
| 128 | - key = url.absoluteString; | |
| 108 | + return url.absoluteString; | |
| 129 | 109 | } |
| 130 | - | |
| 131 | - // Thumbnail Key Appending | |
| 132 | - NSValue *thumbnailSizeValue = context[SDWebImageContextImageThumbnailPixelSize]; | |
| 133 | - if (thumbnailSizeValue != nil) { | |
| 134 | - CGSize thumbnailSize = CGSizeZero; | |
| 135 | -#if SD_MAC | |
| 136 | - thumbnailSize = thumbnailSizeValue.sizeValue; | |
| 137 | -#else | |
| 138 | - thumbnailSize = thumbnailSizeValue.CGSizeValue; | |
| 139 | -#endif | |
| 140 | - BOOL preserveAspectRatio = YES; | |
| 141 | - NSNumber *preserveAspectRatioValue = context[SDWebImageContextImagePreserveAspectRatio]; | |
| 142 | - if (preserveAspectRatioValue != nil) { | |
| 143 | - preserveAspectRatio = preserveAspectRatioValue.boolValue; | |
| 144 | - } | |
| 145 | - key = SDThumbnailedKeyForKey(key, thumbnailSize, preserveAspectRatio); | |
| 146 | - } | |
| 147 | - | |
| 148 | - // Transformer Key Appending | |
| 149 | - id<SDImageTransformer> transformer = self.transformer; | |
| 150 | - if (context[SDWebImageContextImageTransformer]) { | |
| 151 | - transformer = context[SDWebImageContextImageTransformer]; | |
| 152 | - if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { | |
| 153 | - transformer = nil; | |
| 154 | - } | |
| 155 | - } | |
| 156 | - if (transformer) { | |
| 157 | - key = SDTransformedKeyForKey(key, transformer.transformerKey); | |
| 158 | - } | |
| 159 | - | |
| 160 | - return key; | |
| 161 | 110 | } |
| 162 | 111 | |
| 163 | 112 | - (SDWebImageCombinedOperation *)loadImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDImageLoaderProgressBlock)progressBlock completed:(SDInternalCompletionBlock)completedBlock { |
| ... | ... | @@ -194,9 +143,7 @@ static id<SDImageLoader> _defaultImageLoader; |
| 194 | 143 | } |
| 195 | 144 | |
| 196 | 145 | if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { |
| 197 | - NSString *description = isFailedUrl ? @"Image url is blacklisted" : @"Image url is nil"; | |
| 198 | - NSInteger code = isFailedUrl ? SDWebImageErrorBlackListed : SDWebImageErrorInvalidURL; | |
| 199 | - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:code userInfo:@{NSLocalizedDescriptionKey : description}] url:url]; | |
| 146 | + [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorInvalidURL userInfo:@{NSLocalizedDescriptionKey : @"Image url is nil"}] url:url]; | |
| 200 | 147 | return operation; |
| 201 | 148 | } |
| 202 | 149 | |
| ... | ... | @@ -228,62 +175,29 @@ static id<SDImageLoader> _defaultImageLoader; |
| 228 | 175 | return isRunning; |
| 229 | 176 | } |
| 230 | 177 | |
| 231 | -- (void)removeFailedURL:(NSURL *)url { | |
| 232 | - if (!url) { | |
| 233 | - return; | |
| 234 | - } | |
| 235 | - SD_LOCK(self.failedURLsLock); | |
| 236 | - [self.failedURLs removeObject:url]; | |
| 237 | - SD_UNLOCK(self.failedURLsLock); | |
| 238 | -} | |
| 239 | - | |
| 240 | -- (void)removeAllFailedURLs { | |
| 241 | - SD_LOCK(self.failedURLsLock); | |
| 242 | - [self.failedURLs removeAllObjects]; | |
| 243 | - SD_UNLOCK(self.failedURLsLock); | |
| 244 | -} | |
| 245 | - | |
| 246 | 178 | #pragma mark - Private |
| 247 | 179 | |
| 248 | -// Query normal cache process | |
| 180 | +// Query cache process | |
| 249 | 181 | - (void)callCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation |
| 250 | 182 | url:(nonnull NSURL *)url |
| 251 | 183 | options:(SDWebImageOptions)options |
| 252 | 184 | context:(nullable SDWebImageContext *)context |
| 253 | 185 | progress:(nullable SDImageLoaderProgressBlock)progressBlock |
| 254 | 186 | completed:(nullable SDInternalCompletionBlock)completedBlock { |
| 255 | - // Grab the image cache to use | |
| 256 | - id<SDImageCache> imageCache; | |
| 257 | - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { | |
| 258 | - imageCache = context[SDWebImageContextImageCache]; | |
| 259 | - } else { | |
| 260 | - imageCache = self.imageCache; | |
| 261 | - } | |
| 262 | - | |
| 263 | - // Get the query cache type | |
| 264 | - SDImageCacheType queryCacheType = SDImageCacheTypeAll; | |
| 265 | - if (context[SDWebImageContextQueryCacheType]) { | |
| 266 | - queryCacheType = [context[SDWebImageContextQueryCacheType] integerValue]; | |
| 267 | - } | |
| 268 | - | |
| 269 | 187 | // Check whether we should query cache |
| 270 | 188 | BOOL shouldQueryCache = !SD_OPTIONS_CONTAINS(options, SDWebImageFromLoaderOnly); |
| 271 | 189 | if (shouldQueryCache) { |
| 272 | - NSString *key = [self cacheKeyForURL:url context:context]; | |
| 190 | + id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; | |
| 191 | + NSString *key = [self cacheKeyForURL:url cacheKeyFilter:cacheKeyFilter]; | |
| 273 | 192 | @weakify(operation); |
| 274 | - operation.cacheOperation = [imageCache queryImageForKey:key options:options context:context cacheType:queryCacheType completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) { | |
| 193 | + operation.cacheOperation = [self.imageCache queryImageForKey:key options:options context:context completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) { | |
| 275 | 194 | @strongify(operation); |
| 276 | 195 | if (!operation || operation.isCancelled) { |
| 277 | 196 | // Image combined operation cancelled by user |
| 278 | - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during querying the cache"}] url:url]; | |
| 197 | + [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil] url:url]; | |
| 279 | 198 | [self safelyRemoveOperationFromRunning:operation]; |
| 280 | 199 | return; |
| 281 | - } else if (context[SDWebImageContextImageTransformer] && !cachedImage) { | |
| 282 | - // Have a chance to query original cache instead of downloading | |
| 283 | - [self callOriginalCacheProcessForOperation:operation url:url options:options context:context progress:progressBlock completed:completedBlock]; | |
| 284 | - return; | |
| 285 | 200 | } |
| 286 | - | |
| 287 | 201 | // Continue download process |
| 288 | 202 | [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:cachedImage cachedData:cachedData cacheType:cacheType progress:progressBlock completed:completedBlock]; |
| 289 | 203 | }]; |
| ... | ... | @@ -293,69 +207,6 @@ static id<SDImageLoader> _defaultImageLoader; |
| 293 | 207 | } |
| 294 | 208 | } |
| 295 | 209 | |
| 296 | -// Query original cache process | |
| 297 | -- (void)callOriginalCacheProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation | |
| 298 | - url:(nonnull NSURL *)url | |
| 299 | - options:(SDWebImageOptions)options | |
| 300 | - context:(nullable SDWebImageContext *)context | |
| 301 | - progress:(nullable SDImageLoaderProgressBlock)progressBlock | |
| 302 | - completed:(nullable SDInternalCompletionBlock)completedBlock { | |
| 303 | - // Grab the image cache to use | |
| 304 | - id<SDImageCache> imageCache; | |
| 305 | - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { | |
| 306 | - imageCache = context[SDWebImageContextImageCache]; | |
| 307 | - } else { | |
| 308 | - imageCache = self.imageCache; | |
| 309 | - } | |
| 310 | - | |
| 311 | - // Get the original query cache type | |
| 312 | - SDImageCacheType originalQueryCacheType = SDImageCacheTypeNone; | |
| 313 | - if (context[SDWebImageContextOriginalQueryCacheType]) { | |
| 314 | - originalQueryCacheType = [context[SDWebImageContextOriginalQueryCacheType] integerValue]; | |
| 315 | - } | |
| 316 | - | |
| 317 | - // Check whether we should query original cache | |
| 318 | - BOOL shouldQueryOriginalCache = (originalQueryCacheType != SDImageCacheTypeNone); | |
| 319 | - if (shouldQueryOriginalCache) { | |
| 320 | - // Change originContext to mutable | |
| 321 | - SDWebImageMutableContext * __block originContext; | |
| 322 | - if (context) { | |
| 323 | - originContext = [context mutableCopy]; | |
| 324 | - } else { | |
| 325 | - originContext = [NSMutableDictionary dictionary]; | |
| 326 | - } | |
| 327 | - | |
| 328 | - // Disable transformer for cache key generation | |
| 329 | - id<SDImageTransformer> transformer = originContext[SDWebImageContextImageTransformer]; | |
| 330 | - originContext[SDWebImageContextImageTransformer] = [NSNull null]; | |
| 331 | - | |
| 332 | - NSString *key = [self cacheKeyForURL:url context:originContext]; | |
| 333 | - @weakify(operation); | |
| 334 | - operation.cacheOperation = [imageCache queryImageForKey:key options:options context:context cacheType:originalQueryCacheType completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) { | |
| 335 | - @strongify(operation); | |
| 336 | - if (!operation || operation.isCancelled) { | |
| 337 | - // Image combined operation cancelled by user | |
| 338 | - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during querying the cache"}] url:url]; | |
| 339 | - [self safelyRemoveOperationFromRunning:operation]; | |
| 340 | - return; | |
| 341 | - } | |
| 342 | - | |
| 343 | - // Add original transformer | |
| 344 | - if (transformer) { | |
| 345 | - originContext[SDWebImageContextImageTransformer] = transformer; | |
| 346 | - } | |
| 347 | - | |
| 348 | - // Use the store cache process instead of downloading, and ignore .refreshCached option for now | |
| 349 | - [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:cachedImage downloadedData:cachedData finished:YES progress:progressBlock completed:completedBlock]; | |
| 350 | - | |
| 351 | - [self safelyRemoveOperationFromRunning:operation]; | |
| 352 | - }]; | |
| 353 | - } else { | |
| 354 | - // Continue download process | |
| 355 | - [self callDownloadProcessForOperation:operation url:url options:options context:context cachedImage:nil cachedData:nil cacheType:originalQueryCacheType progress:progressBlock completed:completedBlock]; | |
| 356 | - } | |
| 357 | -} | |
| 358 | - | |
| 359 | 210 | // Download process |
| 360 | 211 | - (void)callDownloadProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation |
| 361 | 212 | url:(nonnull NSURL *)url |
| ... | ... | @@ -366,19 +217,11 @@ static id<SDImageLoader> _defaultImageLoader; |
| 366 | 217 | cacheType:(SDImageCacheType)cacheType |
| 367 | 218 | progress:(nullable SDImageLoaderProgressBlock)progressBlock |
| 368 | 219 | completed:(nullable SDInternalCompletionBlock)completedBlock { |
| 369 | - // Grab the image loader to use | |
| 370 | - id<SDImageLoader> imageLoader; | |
| 371 | - if ([context[SDWebImageContextImageLoader] conformsToProtocol:@protocol(SDImageLoader)]) { | |
| 372 | - imageLoader = context[SDWebImageContextImageLoader]; | |
| 373 | - } else { | |
| 374 | - imageLoader = self.imageLoader; | |
| 375 | - } | |
| 376 | - | |
| 377 | 220 | // Check whether we should download image from network |
| 378 | 221 | BOOL shouldDownload = !SD_OPTIONS_CONTAINS(options, SDWebImageFromCacheOnly); |
| 379 | 222 | shouldDownload &= (!cachedImage || options & SDWebImageRefreshCached); |
| 380 | 223 | shouldDownload &= (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url]); |
| 381 | - shouldDownload &= [imageLoader canRequestImageForURL:url]; | |
| 224 | + shouldDownload &= [self.imageLoader canRequestImageForURL:url]; | |
| 382 | 225 | if (shouldDownload) { |
| 383 | 226 | if (cachedImage && options & SDWebImageRefreshCached) { |
| 384 | 227 | // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image |
| ... | ... | @@ -396,11 +239,11 @@ static id<SDImageLoader> _defaultImageLoader; |
| 396 | 239 | } |
| 397 | 240 | |
| 398 | 241 | @weakify(operation); |
| 399 | - operation.loaderOperation = [imageLoader requestImageWithURL:url options:options context:context progress:progressBlock completed:^(UIImage *downloadedImage, NSData *downloadedData, NSError *error, BOOL finished) { | |
| 242 | + operation.loaderOperation = [self.imageLoader requestImageWithURL:url options:options context:context progress:progressBlock completed:^(UIImage *downloadedImage, NSData *downloadedData, NSError *error, BOOL finished) { | |
| 400 | 243 | @strongify(operation); |
| 401 | 244 | if (!operation || operation.isCancelled) { |
| 402 | 245 | // Image combined operation cancelled by user |
| 403 | - [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:@{NSLocalizedDescriptionKey : @"Operation cancelled by user during sending the request"}] url:url]; | |
| 246 | + [self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil] url:url]; | |
| 404 | 247 | } else if (cachedImage && options & SDWebImageRefreshCached && [error.domain isEqualToString:SDWebImageErrorDomain] && error.code == SDWebImageErrorCacheNotModified) { |
| 405 | 248 | // Image refresh hit the NSURLCache cache, do not call the completion block |
| 406 | 249 | } else if ([error.domain isEqualToString:SDWebImageErrorDomain] && error.code == SDWebImageErrorCancelled) { |
| ... | ... | @@ -408,7 +251,7 @@ static id<SDImageLoader> _defaultImageLoader; |
| 408 | 251 | [self callCompletionBlockForOperation:operation completion:completedBlock error:error url:url]; |
| 409 | 252 | } else if (error) { |
| 410 | 253 | [self callCompletionBlockForOperation:operation completion:completedBlock error:error url:url]; |
| 411 | - BOOL shouldBlockFailedURL = [self shouldBlockFailedURLWithURL:url error:error options:options context:context]; | |
| 254 | + BOOL shouldBlockFailedURL = [self shouldBlockFailedURLWithURL:url error:error]; | |
| 412 | 255 | |
| 413 | 256 | if (shouldBlockFailedURL) { |
| 414 | 257 | SD_LOCK(self.failedURLsLock); |
| ... | ... | @@ -421,7 +264,7 @@ static id<SDImageLoader> _defaultImageLoader; |
| 421 | 264 | [self.failedURLs removeObject:url]; |
| 422 | 265 | SD_UNLOCK(self.failedURLsLock); |
| 423 | 266 | } |
| 424 | - // Continue store cache process | |
| 267 | + | |
| 425 | 268 | [self callStoreCacheProcessForOperation:operation url:url options:options context:context downloadedImage:downloadedImage downloadedData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; |
| 426 | 269 | } |
| 427 | 270 | |
| ... | ... | @@ -459,20 +302,12 @@ static id<SDImageLoader> _defaultImageLoader; |
| 459 | 302 | if (context[SDWebImageContextOriginalStoreCacheType]) { |
| 460 | 303 | originalStoreCacheType = [context[SDWebImageContextOriginalStoreCacheType] integerValue]; |
| 461 | 304 | } |
| 462 | - // origin cache key | |
| 463 | - SDWebImageMutableContext *originContext = [context mutableCopy]; | |
| 464 | - // disable transformer for cache key generation | |
| 465 | - originContext[SDWebImageContextImageTransformer] = [NSNull null]; | |
| 466 | - NSString *key = [self cacheKeyForURL:url context:originContext]; | |
| 305 | + id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; | |
| 306 | + NSString *key = [self cacheKeyForURL:url cacheKeyFilter:cacheKeyFilter]; | |
| 467 | 307 | id<SDImageTransformer> transformer = context[SDWebImageContextImageTransformer]; |
| 468 | - if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { | |
| 469 | - transformer = nil; | |
| 470 | - } | |
| 471 | 308 | id<SDWebImageCacheSerializer> cacheSerializer = context[SDWebImageContextCacheSerializer]; |
| 472 | 309 | |
| 473 | - BOOL shouldTransformImage = downloadedImage && transformer; | |
| 474 | - shouldTransformImage = shouldTransformImage && (!downloadedImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)); | |
| 475 | - shouldTransformImage = shouldTransformImage && (!downloadedImage.sd_isVector || (options & SDWebImageTransformVectorImage)); | |
| 310 | + BOOL shouldTransformImage = downloadedImage && (!downloadedImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)) && transformer; | |
| 476 | 311 | BOOL shouldCacheOriginal = downloadedImage && finished; |
| 477 | 312 | |
| 478 | 313 | // if available, store original image to cache |
| ... | ... | @@ -483,74 +318,37 @@ static id<SDImageLoader> _defaultImageLoader; |
| 483 | 318 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ |
| 484 | 319 | @autoreleasepool { |
| 485 | 320 | NSData *cacheData = [cacheSerializer cacheDataWithImage:downloadedImage originalData:downloadedData imageURL:url]; |
| 486 | - [self storeImage:downloadedImage imageData:cacheData forKey:key cacheType:targetStoreCacheType options:options context:context completion:^{ | |
| 487 | - // Continue transform process | |
| 488 | - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; | |
| 489 | - }]; | |
| 321 | + [self.imageCache storeImage:downloadedImage imageData:cacheData forKey:key cacheType:targetStoreCacheType completion:nil]; | |
| 490 | 322 | } |
| 491 | 323 | }); |
| 492 | 324 | } else { |
| 493 | - [self storeImage:downloadedImage imageData:downloadedData forKey:key cacheType:targetStoreCacheType options:options context:context completion:^{ | |
| 494 | - // Continue transform process | |
| 495 | - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; | |
| 496 | - }]; | |
| 325 | + [self.imageCache storeImage:downloadedImage imageData:downloadedData forKey:key cacheType:targetStoreCacheType completion:nil]; | |
| 497 | 326 | } |
| 498 | - } else { | |
| 499 | - // Continue transform process | |
| 500 | - [self callTransformProcessForOperation:operation url:url options:options context:context originalImage:downloadedImage originalData:downloadedData finished:finished progress:progressBlock completed:completedBlock]; | |
| 501 | 327 | } |
| 502 | -} | |
| 503 | - | |
| 504 | -// Transform process | |
| 505 | -- (void)callTransformProcessForOperation:(nonnull SDWebImageCombinedOperation *)operation | |
| 506 | - url:(nonnull NSURL *)url | |
| 507 | - options:(SDWebImageOptions)options | |
| 508 | - context:(SDWebImageContext *)context | |
| 509 | - originalImage:(nullable UIImage *)originalImage | |
| 510 | - originalData:(nullable NSData *)originalData | |
| 511 | - finished:(BOOL)finished | |
| 512 | - progress:(nullable SDImageLoaderProgressBlock)progressBlock | |
| 513 | - completed:(nullable SDInternalCompletionBlock)completedBlock { | |
| 514 | - // the target image store cache type | |
| 515 | - SDImageCacheType storeCacheType = SDImageCacheTypeAll; | |
| 516 | - if (context[SDWebImageContextStoreCacheType]) { | |
| 517 | - storeCacheType = [context[SDWebImageContextStoreCacheType] integerValue]; | |
| 518 | - } | |
| 519 | - // transformed cache key | |
| 520 | - NSString *key = [self cacheKeyForURL:url context:context]; | |
| 521 | - id<SDImageTransformer> transformer = context[SDWebImageContextImageTransformer]; | |
| 522 | - if (![transformer conformsToProtocol:@protocol(SDImageTransformer)]) { | |
| 523 | - transformer = nil; | |
| 524 | - } | |
| 525 | - id<SDWebImageCacheSerializer> cacheSerializer = context[SDWebImageContextCacheSerializer]; | |
| 526 | - | |
| 527 | - BOOL shouldTransformImage = originalImage && transformer; | |
| 528 | - shouldTransformImage = shouldTransformImage && (!originalImage.sd_isAnimated || (options & SDWebImageTransformAnimatedImage)); | |
| 529 | - shouldTransformImage = shouldTransformImage && (!originalImage.sd_isVector || (options & SDWebImageTransformVectorImage)); | |
| 530 | 328 | // if available, store transformed image to cache |
| 531 | 329 | if (shouldTransformImage) { |
| 532 | 330 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ |
| 533 | 331 | @autoreleasepool { |
| 534 | - UIImage *transformedImage = [transformer transformedImageWithImage:originalImage forKey:key]; | |
| 332 | + UIImage *transformedImage = [transformer transformedImageWithImage:downloadedImage forKey:key]; | |
| 535 | 333 | if (transformedImage && finished) { |
| 536 | - BOOL imageWasTransformed = ![transformedImage isEqual:originalImage]; | |
| 334 | + NSString *transformerKey = [transformer transformerKey]; | |
| 335 | + NSString *cacheKey = SDTransformedKeyForKey(key, transformerKey); | |
| 336 | + BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; | |
| 537 | 337 | NSData *cacheData; |
| 538 | 338 | // pass nil if the image was transformed, so we can recalculate the data from the image |
| 539 | 339 | if (cacheSerializer && (storeCacheType == SDImageCacheTypeDisk || storeCacheType == SDImageCacheTypeAll)) { |
| 540 | - cacheData = [cacheSerializer cacheDataWithImage:transformedImage originalData:(imageWasTransformed ? nil : originalData) imageURL:url]; | |
| 340 | + cacheData = [cacheSerializer cacheDataWithImage:transformedImage originalData:(imageWasTransformed ? nil : downloadedData) imageURL:url]; | |
| 541 | 341 | } else { |
| 542 | - cacheData = (imageWasTransformed ? nil : originalData); | |
| 342 | + cacheData = (imageWasTransformed ? nil : downloadedData); | |
| 543 | 343 | } |
| 544 | - [self storeImage:transformedImage imageData:cacheData forKey:key cacheType:storeCacheType options:options context:context completion:^{ | |
| 545 | - [self callCompletionBlockForOperation:operation completion:completedBlock image:transformedImage data:originalData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; | |
| 546 | - }]; | |
| 547 | - } else { | |
| 548 | - [self callCompletionBlockForOperation:operation completion:completedBlock image:transformedImage data:originalData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; | |
| 344 | + [self.imageCache storeImage:transformedImage imageData:cacheData forKey:cacheKey cacheType:storeCacheType completion:nil]; | |
| 549 | 345 | } |
| 346 | + | |
| 347 | + [self callCompletionBlockForOperation:operation completion:completedBlock image:transformedImage data:downloadedData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; | |
| 550 | 348 | } |
| 551 | 349 | }); |
| 552 | 350 | } else { |
| 553 | - [self callCompletionBlockForOperation:operation completion:completedBlock image:originalImage data:originalData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; | |
| 351 | + [self callCompletionBlockForOperation:operation completion:completedBlock image:downloadedImage data:downloadedData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; | |
| 554 | 352 | } |
| 555 | 353 | } |
| 556 | 354 | |
| ... | ... | @@ -565,35 +363,6 @@ static id<SDImageLoader> _defaultImageLoader; |
| 565 | 363 | SD_UNLOCK(self.runningOperationsLock); |
| 566 | 364 | } |
| 567 | 365 | |
| 568 | -- (void)storeImage:(nullable UIImage *)image | |
| 569 | - imageData:(nullable NSData *)data | |
| 570 | - forKey:(nullable NSString *)key | |
| 571 | - cacheType:(SDImageCacheType)cacheType | |
| 572 | - options:(SDWebImageOptions)options | |
| 573 | - context:(nullable SDWebImageContext *)context | |
| 574 | - completion:(nullable SDWebImageNoParamsBlock)completion { | |
| 575 | - id<SDImageCache> imageCache; | |
| 576 | - if ([context[SDWebImageContextImageCache] conformsToProtocol:@protocol(SDImageCache)]) { | |
| 577 | - imageCache = context[SDWebImageContextImageCache]; | |
| 578 | - } else { | |
| 579 | - imageCache = self.imageCache; | |
| 580 | - } | |
| 581 | - BOOL waitStoreCache = SD_OPTIONS_CONTAINS(options, SDWebImageWaitStoreCache); | |
| 582 | - // Check whether we should wait the store cache finished. If not, callback immediately | |
| 583 | - [imageCache storeImage:image imageData:data forKey:key cacheType:cacheType completion:^{ | |
| 584 | - if (waitStoreCache) { | |
| 585 | - if (completion) { | |
| 586 | - completion(); | |
| 587 | - } | |
| 588 | - } | |
| 589 | - }]; | |
| 590 | - if (!waitStoreCache) { | |
| 591 | - if (completion) { | |
| 592 | - completion(); | |
| 593 | - } | |
| 594 | - } | |
| 595 | -} | |
| 596 | - | |
| 597 | 366 | - (void)callCompletionBlockForOperation:(nullable SDWebImageCombinedOperation*)operation |
| 598 | 367 | completion:(nullable SDInternalCompletionBlock)completionBlock |
| 599 | 368 | error:(nullable NSError *)error |
| ... | ... | @@ -617,21 +386,13 @@ static id<SDImageLoader> _defaultImageLoader; |
| 617 | 386 | } |
| 618 | 387 | |
| 619 | 388 | - (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url |
| 620 | - error:(nonnull NSError *)error | |
| 621 | - options:(SDWebImageOptions)options | |
| 622 | - context:(nullable SDWebImageContext *)context { | |
| 623 | - id<SDImageLoader> imageLoader; | |
| 624 | - if ([context[SDWebImageContextImageLoader] conformsToProtocol:@protocol(SDImageLoader)]) { | |
| 625 | - imageLoader = context[SDWebImageContextImageLoader]; | |
| 626 | - } else { | |
| 627 | - imageLoader = self.imageLoader; | |
| 628 | - } | |
| 389 | + error:(nonnull NSError *)error { | |
| 629 | 390 | // Check whether we should block failed url |
| 630 | 391 | BOOL shouldBlockFailedURL; |
| 631 | 392 | if ([self.delegate respondsToSelector:@selector(imageManager:shouldBlockFailedURL:withError:)]) { |
| 632 | 393 | shouldBlockFailedURL = [self.delegate imageManager:self shouldBlockFailedURL:url withError:error]; |
| 633 | 394 | } else { |
| 634 | - shouldBlockFailedURL = [imageLoader shouldBlockFailedURLWithURL:url error:error]; | |
| 395 | + shouldBlockFailedURL = [self.imageLoader shouldBlockFailedURLWithURL:url error:error]; | |
| 635 | 396 | } |
| 636 | 397 | |
| 637 | 398 | return shouldBlockFailedURL; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h
| ... | ... | @@ -92,7 +92,7 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, |
| 92 | 92 | @property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue; |
| 93 | 93 | |
| 94 | 94 | /** |
| 95 | - * The delegate for the prefetcher. Defaults to nil. | |
| 95 | + * The delegate for the prefetcher. Defatuls to nil. | |
| 96 | 96 | */ |
| 97 | 97 | @property (weak, nonatomic, nullable) id <SDWebImagePrefetcherDelegate> delegate; |
| 98 | 98 | |
| ... | ... | @@ -108,7 +108,7 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, |
| 108 | 108 | |
| 109 | 109 | /** |
| 110 | 110 | * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. |
| 111 | - * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. | |
| 111 | + * Prefetching is seperate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. | |
| 112 | 112 | * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. |
| 113 | 113 | * |
| 114 | 114 | * @param urls list of URLs to prefetch |
| ... | ... | @@ -118,7 +118,7 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, |
| 118 | 118 | |
| 119 | 119 | /** |
| 120 | 120 | * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. |
| 121 | - * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. | |
| 121 | + * Prefetching is seperate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. | |
| 122 | 122 | * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. |
| 123 | 123 | * |
| 124 | 124 | * @param urls list of URLs to prefetch | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.m
| ... | ... | @@ -20,10 +20,6 @@ |
| 20 | 20 | atomic_flag _isAllFinished; |
| 21 | 21 | |
| 22 | 22 | unsigned long _totalCount; |
| 23 | - | |
| 24 | - // Used to ensure NSPointerArray thread safe | |
| 25 | - dispatch_semaphore_t _prefetchOperationsLock; | |
| 26 | - dispatch_semaphore_t _loadOperationsLock; | |
| 27 | 23 | } |
| 28 | 24 | |
| 29 | 25 | @property (nonatomic, copy, readwrite) NSArray<NSURL *> *urls; |
| ... | ... | @@ -110,6 +106,7 @@ |
| 110 | 106 | } |
| 111 | 107 | |
| 112 | 108 | - (void)startPrefetchWithToken:(SDWebImagePrefetchToken * _Nonnull)token { |
| 109 | + NSPointerArray *operations = token.loadOperations; | |
| 113 | 110 | for (NSURL *url in token.urls) { |
| 114 | 111 | @autoreleasepool { |
| 115 | 112 | @weakify(self); |
| ... | ... | @@ -145,13 +142,13 @@ |
| 145 | 142 | [asyncOperation complete]; |
| 146 | 143 | }]; |
| 147 | 144 | NSAssert(operation != nil, @"Operation should not be nil, [SDWebImageManager loadImageWithURL:options:context:progress:completed:] break prefetch logic"); |
| 148 | - SD_LOCK(token->_loadOperationsLock); | |
| 149 | - [token.loadOperations addPointer:(__bridge void *)operation]; | |
| 150 | - SD_UNLOCK(token->_loadOperationsLock); | |
| 145 | + @synchronized (token) { | |
| 146 | + [operations addPointer:(__bridge void *)operation]; | |
| 147 | + } | |
| 151 | 148 | }]; |
| 152 | - SD_LOCK(token->_prefetchOperationsLock); | |
| 153 | - [token.prefetchOperations addPointer:(__bridge void *)prefetchOperation]; | |
| 154 | - SD_UNLOCK(token->_prefetchOperationsLock); | |
| 149 | + @synchronized (token) { | |
| 150 | + [token.prefetchOperations addPointer:(__bridge void *)prefetchOperation]; | |
| 151 | + } | |
| 155 | 152 | [self.prefetchQueue addOperation:prefetchOperation]; |
| 156 | 153 | } |
| 157 | 154 | } |
| ... | ... | @@ -265,38 +262,24 @@ |
| 265 | 262 | |
| 266 | 263 | @implementation SDWebImagePrefetchToken |
| 267 | 264 | |
| 268 | -- (instancetype)init { | |
| 269 | - self = [super init]; | |
| 270 | - if (self) { | |
| 271 | - _prefetchOperationsLock = dispatch_semaphore_create(1); | |
| 272 | - _loadOperationsLock = dispatch_semaphore_create(1); | |
| 273 | - } | |
| 274 | - return self; | |
| 275 | -} | |
| 276 | - | |
| 277 | 265 | - (void)cancel { |
| 278 | - SD_LOCK(_prefetchOperationsLock); | |
| 279 | - [self.prefetchOperations compact]; | |
| 280 | - for (id operation in self.prefetchOperations) { | |
| 281 | - id<SDWebImageOperation> strongOperation = operation; | |
| 282 | - if (strongOperation) { | |
| 283 | - [strongOperation cancel]; | |
| 266 | + @synchronized (self) { | |
| 267 | + [self.prefetchOperations compact]; | |
| 268 | + for (id operation in self.prefetchOperations) { | |
| 269 | + if ([operation conformsToProtocol:@protocol(SDWebImageOperation)]) { | |
| 270 | + [operation cancel]; | |
| 271 | + } | |
| 284 | 272 | } |
| 285 | - } | |
| 286 | - self.prefetchOperations.count = 0; | |
| 287 | - SD_UNLOCK(_prefetchOperationsLock); | |
| 288 | - | |
| 289 | - SD_LOCK(_loadOperationsLock); | |
| 290 | - [self.loadOperations compact]; | |
| 291 | - for (id operation in self.loadOperations) { | |
| 292 | - id<SDWebImageOperation> strongOperation = operation; | |
| 293 | - if (strongOperation) { | |
| 294 | - [strongOperation cancel]; | |
| 273 | + self.prefetchOperations.count = 0; | |
| 274 | + | |
| 275 | + [self.loadOperations compact]; | |
| 276 | + for (id operation in self.loadOperations) { | |
| 277 | + if ([operation conformsToProtocol:@protocol(SDWebImageOperation)]) { | |
| 278 | + [operation cancel]; | |
| 279 | + } | |
| 295 | 280 | } |
| 281 | + self.loadOperations.count = 0; | |
| 296 | 282 | } |
| 297 | - self.loadOperations.count = 0; | |
| 298 | - SD_UNLOCK(_loadOperationsLock); | |
| 299 | - | |
| 300 | 283 | self.completionBlock = nil; |
| 301 | 284 | self.progressBlock = nil; |
| 302 | 285 | [self.prefetcher removeRunningToken:self]; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h
| ... | ... | @@ -15,21 +15,7 @@ |
| 15 | 15 | typedef UIViewAnimationOptions SDWebImageAnimationOptions; |
| 16 | 16 | #else |
| 17 | 17 | typedef NS_OPTIONS(NSUInteger, SDWebImageAnimationOptions) { |
| 18 | - SDWebImageAnimationOptionAllowsImplicitAnimation = 1 << 0, // specify `allowsImplicitAnimation` for the `NSAnimationContext` | |
| 19 | - | |
| 20 | - SDWebImageAnimationOptionCurveEaseInOut = 0 << 16, // default | |
| 21 | - SDWebImageAnimationOptionCurveEaseIn = 1 << 16, | |
| 22 | - SDWebImageAnimationOptionCurveEaseOut = 2 << 16, | |
| 23 | - SDWebImageAnimationOptionCurveLinear = 3 << 16, | |
| 24 | - | |
| 25 | - SDWebImageAnimationOptionTransitionNone = 0 << 20, // default | |
| 26 | - SDWebImageAnimationOptionTransitionFlipFromLeft = 1 << 20, | |
| 27 | - SDWebImageAnimationOptionTransitionFlipFromRight = 2 << 20, | |
| 28 | - SDWebImageAnimationOptionTransitionCurlUp = 3 << 20, | |
| 29 | - SDWebImageAnimationOptionTransitionCurlDown = 4 << 20, | |
| 30 | - SDWebImageAnimationOptionTransitionCrossDissolve = 5 << 20, | |
| 31 | - SDWebImageAnimationOptionTransitionFlipFromTop = 6 << 20, | |
| 32 | - SDWebImageAnimationOptionTransitionFlipFromBottom = 7 << 20, | |
| 18 | + SDWebImageAnimationOptionAllowsImplicitAnimation = 1 << 0, // specify `allowsImplicitAnimation` for the `NSAnimationContext` | |
| 33 | 19 | }; |
| 34 | 20 | #endif |
| 35 | 21 | |
| ... | ... | @@ -46,7 +32,7 @@ typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); |
| 46 | 32 | @interface SDWebImageTransition : NSObject |
| 47 | 33 | |
| 48 | 34 | /** |
| 49 | - By default, we set the image to the view at the beginning of the animations. You can disable this and provide custom set image process | |
| 35 | + By default, we set the image to the view at the beginning of the animtions. You can disable this and provide custom set image process | |
| 50 | 36 | */ |
| 51 | 37 | @property (nonatomic, assign) BOOL avoidAutoSetImage; |
| 52 | 38 | /** |
| ... | ... | @@ -56,7 +42,7 @@ typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); |
| 56 | 42 | /** |
| 57 | 43 | The timing function used for all animations within this transition animation (macOS). |
| 58 | 44 | */ |
| 59 | -@property (nonatomic, strong, nullable) CAMediaTimingFunction *timingFunction API_UNAVAILABLE(ios, tvos, watchos) API_DEPRECATED("Use SDWebImageAnimationOptions instead, or grab NSAnimationContext.currentContext and modify the timingFunction", macos(10.10, 10.10)); | |
| 45 | +@property (nonatomic, strong, nullable) CAMediaTimingFunction *timingFunction API_UNAVAILABLE(ios, tvos, watchos); | |
| 60 | 46 | /** |
| 61 | 47 | A mask of options indicating how you want to perform the animations. |
| 62 | 48 | */ |
| ... | ... | @@ -83,7 +69,7 @@ typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); |
| 83 | 69 | */ |
| 84 | 70 | @interface SDWebImageTransition (Conveniences) |
| 85 | 71 | |
| 86 | -/// Fade-in transition. | |
| 72 | +/// Fade transition. | |
| 87 | 73 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *fadeTransition; |
| 88 | 74 | /// Flip from left transition. |
| 89 | 75 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *flipFromLeftTransition; |
| ... | ... | @@ -98,34 +84,6 @@ typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); |
| 98 | 84 | /// Curl down transition. |
| 99 | 85 | @property (nonatomic, class, nonnull, readonly) SDWebImageTransition *curlDownTransition; |
| 100 | 86 | |
| 101 | -/// Fade-in transition with duration. | |
| 102 | -/// @param duration transition duration, use ease-in-out | |
| 103 | -+ (nonnull instancetype)fadeTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(fade(duration:)); | |
| 104 | - | |
| 105 | -/// Flip from left transition with duration. | |
| 106 | -/// @param duration transition duration, use ease-in-out | |
| 107 | -+ (nonnull instancetype)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromLeft(duration:)); | |
| 108 | - | |
| 109 | -/// Flip from right transition with duration. | |
| 110 | -/// @param duration transition duration, use ease-in-out | |
| 111 | -+ (nonnull instancetype)flipFromRightTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromRight(duration:)); | |
| 112 | - | |
| 113 | -/// Flip from top transition with duration. | |
| 114 | -/// @param duration transition duration, use ease-in-out | |
| 115 | -+ (nonnull instancetype)flipFromTopTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromTop(duration:)); | |
| 116 | - | |
| 117 | -/// Flip from bottom transition with duration. | |
| 118 | -/// @param duration transition duration, use ease-in-out | |
| 119 | -+ (nonnull instancetype)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(flipFromBottom(duration:)); | |
| 120 | - | |
| 121 | -/// Curl up transition with duration. | |
| 122 | -/// @param duration transition duration, use ease-in-out | |
| 123 | -+ (nonnull instancetype)curlUpTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(curlUp(duration:)); | |
| 124 | - | |
| 125 | -/// Curl down transition with duration. | |
| 126 | -/// @param duration transition duration, use ease-in-out | |
| 127 | -+ (nonnull instancetype)curlDownTransitionWithDuration:(NSTimeInterval)duration NS_SWIFT_NAME(curlDown(duration:)); | |
| 128 | - | |
| 129 | 87 | @end |
| 130 | 88 | |
| 131 | 89 | #endif | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m
| ... | ... | @@ -11,62 +11,7 @@ |
| 11 | 11 | #if SD_UIKIT || SD_MAC |
| 12 | 12 | |
| 13 | 13 | #if SD_MAC |
| 14 | -#import "SDWebImageTransitionInternal.h" | |
| 15 | -#import "SDInternalMacros.h" | |
| 16 | - | |
| 17 | -CAMediaTimingFunction * SDTimingFunctionFromAnimationOptions(SDWebImageAnimationOptions options) { | |
| 18 | - if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveLinear, options)) { | |
| 19 | - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; | |
| 20 | - } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseIn, options)) { | |
| 21 | - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; | |
| 22 | - } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseOut, options)) { | |
| 23 | - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; | |
| 24 | - } else if (SD_OPTIONS_CONTAINS(SDWebImageAnimationOptionCurveEaseInOut, options)) { | |
| 25 | - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; | |
| 26 | - } else { | |
| 27 | - return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; | |
| 28 | - } | |
| 29 | -} | |
| 30 | - | |
| 31 | -CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions options) { | |
| 32 | - if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCrossDissolve)) { | |
| 33 | - CATransition *trans = [CATransition animation]; | |
| 34 | - trans.type = kCATransitionFade; | |
| 35 | - return trans; | |
| 36 | - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromLeft)) { | |
| 37 | - CATransition *trans = [CATransition animation]; | |
| 38 | - trans.type = kCATransitionPush; | |
| 39 | - trans.subtype = kCATransitionFromLeft; | |
| 40 | - return trans; | |
| 41 | - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromRight)) { | |
| 42 | - CATransition *trans = [CATransition animation]; | |
| 43 | - trans.type = kCATransitionPush; | |
| 44 | - trans.subtype = kCATransitionFromRight; | |
| 45 | - return trans; | |
| 46 | - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromTop)) { | |
| 47 | - CATransition *trans = [CATransition animation]; | |
| 48 | - trans.type = kCATransitionPush; | |
| 49 | - trans.subtype = kCATransitionFromTop; | |
| 50 | - return trans; | |
| 51 | - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionFlipFromBottom)) { | |
| 52 | - CATransition *trans = [CATransition animation]; | |
| 53 | - trans.type = kCATransitionPush; | |
| 54 | - trans.subtype = kCATransitionFromBottom; | |
| 55 | - return trans; | |
| 56 | - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCurlUp)) { | |
| 57 | - CATransition *trans = [CATransition animation]; | |
| 58 | - trans.type = kCATransitionReveal; | |
| 59 | - trans.subtype = kCATransitionFromTop; | |
| 60 | - return trans; | |
| 61 | - } else if (SD_OPTIONS_CONTAINS(options, SDWebImageAnimationOptionTransitionCurlDown)) { | |
| 62 | - CATransition *trans = [CATransition animation]; | |
| 63 | - trans.type = kCATransitionReveal; | |
| 64 | - trans.subtype = kCATransitionFromBottom; | |
| 65 | - return trans; | |
| 66 | - } else { | |
| 67 | - return nil; | |
| 68 | - } | |
| 69 | -} | |
| 14 | +#import <QuartzCore/QuartzCore.h> | |
| 70 | 15 | #endif |
| 71 | 16 | |
| 72 | 17 | @implementation SDWebImageTransition |
| ... | ... | @@ -84,101 +29,106 @@ CATransition * SDTransitionFromAnimationOptions(SDWebImageAnimationOptions optio |
| 84 | 29 | @implementation SDWebImageTransition (Conveniences) |
| 85 | 30 | |
| 86 | 31 | + (SDWebImageTransition *)fadeTransition { |
| 87 | - return [self fadeTransitionWithDuration:0.5]; | |
| 88 | -} | |
| 89 | - | |
| 90 | -+ (SDWebImageTransition *)fadeTransitionWithDuration:(NSTimeInterval)duration { | |
| 91 | 32 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 92 | 33 | #if SD_UIKIT |
| 93 | 34 | transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction; |
| 94 | 35 | #else |
| 95 | - transition.animationOptions = SDWebImageAnimationOptionTransitionCrossDissolve; | |
| 36 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 37 | + CATransition *trans = [CATransition animation]; | |
| 38 | + trans.type = kCATransitionFade; | |
| 39 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 40 | + }; | |
| 96 | 41 | #endif |
| 97 | 42 | return transition; |
| 98 | 43 | } |
| 99 | 44 | |
| 100 | 45 | + (SDWebImageTransition *)flipFromLeftTransition { |
| 101 | - return [self flipFromLeftTransitionWithDuration:0.5]; | |
| 102 | -} | |
| 103 | - | |
| 104 | -+ (SDWebImageTransition *)flipFromLeftTransitionWithDuration:(NSTimeInterval)duration { | |
| 105 | 46 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 106 | 47 | #if SD_UIKIT |
| 107 | 48 | transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowUserInteraction; |
| 108 | 49 | #else |
| 109 | - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromLeft; | |
| 50 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 51 | + CATransition *trans = [CATransition animation]; | |
| 52 | + trans.type = kCATransitionPush; | |
| 53 | + trans.subtype = kCATransitionFromLeft; | |
| 54 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 55 | + }; | |
| 110 | 56 | #endif |
| 111 | 57 | return transition; |
| 112 | 58 | } |
| 113 | 59 | |
| 114 | 60 | + (SDWebImageTransition *)flipFromRightTransition { |
| 115 | - return [self flipFromRightTransitionWithDuration:0.5]; | |
| 116 | -} | |
| 117 | - | |
| 118 | -+ (SDWebImageTransition *)flipFromRightTransitionWithDuration:(NSTimeInterval)duration { | |
| 119 | 61 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 120 | 62 | #if SD_UIKIT |
| 121 | 63 | transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionAllowUserInteraction; |
| 122 | 64 | #else |
| 123 | - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromRight; | |
| 65 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 66 | + CATransition *trans = [CATransition animation]; | |
| 67 | + trans.type = kCATransitionPush; | |
| 68 | + trans.subtype = kCATransitionFromRight; | |
| 69 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 70 | + }; | |
| 124 | 71 | #endif |
| 125 | 72 | return transition; |
| 126 | 73 | } |
| 127 | 74 | |
| 128 | 75 | + (SDWebImageTransition *)flipFromTopTransition { |
| 129 | - return [self flipFromTopTransitionWithDuration:0.5]; | |
| 130 | -} | |
| 131 | - | |
| 132 | -+ (SDWebImageTransition *)flipFromTopTransitionWithDuration:(NSTimeInterval)duration { | |
| 133 | 76 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 134 | 77 | #if SD_UIKIT |
| 135 | 78 | transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionAllowUserInteraction; |
| 136 | 79 | #else |
| 137 | - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromTop; | |
| 80 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 81 | + CATransition *trans = [CATransition animation]; | |
| 82 | + trans.type = kCATransitionPush; | |
| 83 | + trans.subtype = kCATransitionFromTop; | |
| 84 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 85 | + }; | |
| 138 | 86 | #endif |
| 139 | 87 | return transition; |
| 140 | 88 | } |
| 141 | 89 | |
| 142 | 90 | + (SDWebImageTransition *)flipFromBottomTransition { |
| 143 | - return [self flipFromBottomTransitionWithDuration:0.5]; | |
| 144 | -} | |
| 145 | - | |
| 146 | -+ (SDWebImageTransition *)flipFromBottomTransitionWithDuration:(NSTimeInterval)duration { | |
| 147 | 91 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 148 | 92 | #if SD_UIKIT |
| 149 | 93 | transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionAllowUserInteraction; |
| 150 | 94 | #else |
| 151 | - transition.animationOptions = SDWebImageAnimationOptionTransitionFlipFromBottom; | |
| 95 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 96 | + CATransition *trans = [CATransition animation]; | |
| 97 | + trans.type = kCATransitionPush; | |
| 98 | + trans.subtype = kCATransitionFromBottom; | |
| 99 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 100 | + }; | |
| 152 | 101 | #endif |
| 153 | 102 | return transition; |
| 154 | 103 | } |
| 155 | 104 | |
| 156 | 105 | + (SDWebImageTransition *)curlUpTransition { |
| 157 | - return [self curlUpTransitionWithDuration:0.5]; | |
| 158 | -} | |
| 159 | - | |
| 160 | -+ (SDWebImageTransition *)curlUpTransitionWithDuration:(NSTimeInterval)duration { | |
| 161 | 106 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 162 | 107 | #if SD_UIKIT |
| 163 | 108 | transition.animationOptions = UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionAllowUserInteraction; |
| 164 | 109 | #else |
| 165 | - transition.animationOptions = SDWebImageAnimationOptionTransitionCurlUp; | |
| 110 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 111 | + CATransition *trans = [CATransition animation]; | |
| 112 | + trans.type = kCATransitionReveal; | |
| 113 | + trans.subtype = kCATransitionFromTop; | |
| 114 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 115 | + }; | |
| 166 | 116 | #endif |
| 167 | 117 | return transition; |
| 168 | 118 | } |
| 169 | 119 | |
| 170 | 120 | + (SDWebImageTransition *)curlDownTransition { |
| 171 | - return [self curlDownTransitionWithDuration:0.5]; | |
| 172 | -} | |
| 173 | - | |
| 174 | -+ (SDWebImageTransition *)curlDownTransitionWithDuration:(NSTimeInterval)duration { | |
| 175 | 121 | SDWebImageTransition *transition = [SDWebImageTransition new]; |
| 176 | 122 | #if SD_UIKIT |
| 177 | 123 | transition.animationOptions = UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionAllowUserInteraction; |
| 178 | 124 | #else |
| 179 | - transition.animationOptions = SDWebImageAnimationOptionTransitionCurlDown; | |
| 125 | + transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { | |
| 126 | + CATransition *trans = [CATransition animation]; | |
| 127 | + trans.type = kCATransitionReveal; | |
| 128 | + trans.subtype = kCATransitionFromBottom; | |
| 129 | + [view.layer addAnimation:trans forKey:kCATransition]; | |
| 130 | + }; | |
| 180 | 131 | #endif |
| 181 | - transition.duration = duration; | |
| 182 | 132 | return transition; |
| 183 | 133 | } |
| 184 | 134 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | #import "SDWebImageCompat.h" |
| 11 | 11 | |
| 12 | 12 | /** |
| 13 | - This category is just use as a convenience method. For more detail control, use methods in `UIImage+MultiFormat.h` or directly use `SDImageCoder`. | |
| 13 | + This category is just use as a convenience method. For more detail control, use methods in `UIImage+MultiFormat.h` or directlly use `SDImageCoder`. | |
| 14 | 14 | */ |
| 15 | 15 | @interface UIImage (GIF) |
| 16 | 16 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h
| ... | ... | @@ -17,7 +17,7 @@ |
| 17 | 17 | The memory cache cost for specify image used by image cache. The cost function is the bytes size held in memory. |
| 18 | 18 | If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost. |
| 19 | 19 | |
| 20 | - For `UIImage`, this method return the single frame bytes size when `image.images` is nil for static image. Return full frame bytes size when `image.images` is not nil for animated image. | |
| 20 | + For `UIImage`, this method return the single frame bytes size when `image.images` is nil for static image. Retuen full frame bytes size when `image.images` is not nil for animated image. | |
| 21 | 21 | For `NSImage`, this method return the single frame bytes size because `NSImage` does not store all frames in memory. |
| 22 | 22 | @note Note that because of the limitations of category this property can get out of sync if you create another instance with CGImage or other methods. |
| 23 | 23 | @note For custom animated class conforms to `SDAnimatedImage`, you can override this getter method in your subclass to return a more proper value instead, which representing the current frame's total bytes. | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h
| ... | ... | @@ -28,21 +28,13 @@ |
| 28 | 28 | |
| 29 | 29 | /** |
| 30 | 30 | * UIKit: |
| 31 | - * Check the `images` array property. | |
| 31 | + * Check the `images` array property | |
| 32 | 32 | * AppKit: |
| 33 | 33 | * NSImage currently only support animated via GIF imageRep unlike UIImage. It will check the imageRep's frame count. |
| 34 | 34 | */ |
| 35 | 35 | @property (nonatomic, assign, readonly) BOOL sd_isAnimated; |
| 36 | 36 | |
| 37 | 37 | /** |
| 38 | - * UIKit: | |
| 39 | - * Check the `isSymbolImage` property. Also check the system PDF(iOS 11+) && SVG(iOS 13+) support. | |
| 40 | - * AppKit: | |
| 41 | - * NSImage supports PDF && SVG && EPS imageRep, check the imageRep class. | |
| 42 | - */ | |
| 43 | -@property (nonatomic, assign, readonly) BOOL sd_isVector; | |
| 44 | - | |
| 45 | -/** | |
| 46 | 38 | * The image format represent the original compressed image data format. |
| 47 | 39 | * If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value. |
| 48 | 40 | * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m
| ... | ... | @@ -8,7 +8,6 @@ |
| 8 | 8 | |
| 9 | 9 | #import "UIImage+Metadata.h" |
| 10 | 10 | #import "NSImage+Compatibility.h" |
| 11 | -#import "SDInternalMacros.h" | |
| 12 | 11 | #import "objc/runtime.h" |
| 13 | 12 | |
| 14 | 13 | @implementation UIImage (Metadata) |
| ... | ... | @@ -33,32 +32,6 @@ |
| 33 | 32 | return (self.images != nil); |
| 34 | 33 | } |
| 35 | 34 | |
| 36 | -#pragma clang diagnostic push | |
| 37 | -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" | |
| 38 | -- (BOOL)sd_isVector { | |
| 39 | - if (@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)) { | |
| 40 | - // Xcode 11 supports symbol image, keep Xcode 10 compatible currently | |
| 41 | - SEL SymbolSelector = NSSelectorFromString(@"isSymbolImage"); | |
| 42 | - if ([self respondsToSelector:SymbolSelector] && [self performSelector:SymbolSelector]) { | |
| 43 | - return YES; | |
| 44 | - } | |
| 45 | - // SVG | |
| 46 | - SEL SVGSelector = SD_SEL_SPI(CGSVGDocument); | |
| 47 | - if ([self respondsToSelector:SVGSelector] && [self performSelector:SVGSelector]) { | |
| 48 | - return YES; | |
| 49 | - } | |
| 50 | - } | |
| 51 | - if (@available(iOS 11.0, tvOS 11.0, watchOS 4.0, *)) { | |
| 52 | ||
| 53 | - SEL PDFSelector = SD_SEL_SPI(CGPDFPage); | |
| 54 | - if ([self respondsToSelector:PDFSelector] && [self performSelector:PDFSelector]) { | |
| 55 | - return YES; | |
| 56 | - } | |
| 57 | - } | |
| 58 | - return NO; | |
| 59 | -} | |
| 60 | -#pragma clang diagnostic pop | |
| 61 | - | |
| 62 | 35 | #else |
| 63 | 36 | |
| 64 | 37 | - (NSUInteger)sd_imageLoopCount { |
| ... | ... | @@ -88,7 +61,7 @@ |
| 88 | 61 | } |
| 89 | 62 | |
| 90 | 63 | - (BOOL)sd_isAnimated { |
| 91 | - BOOL isAnimated = NO; | |
| 64 | + BOOL isGIF = NO; | |
| 92 | 65 | NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); |
| 93 | 66 | NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; |
| 94 | 67 | NSBitmapImageRep *bitmapImageRep; |
| ... | ... | @@ -97,24 +70,9 @@ |
| 97 | 70 | } |
| 98 | 71 | if (bitmapImageRep) { |
| 99 | 72 | NSUInteger frameCount = [[bitmapImageRep valueForProperty:NSImageFrameCount] unsignedIntegerValue]; |
| 100 | - isAnimated = frameCount > 1 ? YES : NO; | |
| 101 | - } | |
| 102 | - return isAnimated; | |
| 103 | -} | |
| 104 | - | |
| 105 | -- (BOOL)sd_isVector { | |
| 106 | - NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); | |
| 107 | - NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; | |
| 108 | - if ([imageRep isKindOfClass:[NSPDFImageRep class]]) { | |
| 109 | - return YES; | |
| 110 | - } | |
| 111 | - if ([imageRep isKindOfClass:[NSEPSImageRep class]]) { | |
| 112 | - return YES; | |
| 113 | - } | |
| 114 | - if ([NSStringFromClass(imageRep.class) hasSuffix:@"NSSVGImageRep"]) { | |
| 115 | - return YES; | |
| 73 | + isGIF = frameCount > 1 ? YES : NO; | |
| 116 | 74 | } |
| 117 | - return NO; | |
| 75 | + return isGIF; | |
| 118 | 76 | } |
| 119 | 77 | |
| 120 | 78 | #endif | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h
| ... | ... | @@ -45,7 +45,6 @@ |
| 45 | 45 | /** |
| 46 | 46 | Encode the current image to the data, the image format is unspecified |
| 47 | 47 | |
| 48 | - @note If the receiver is `SDAnimatedImage`, this will return the animated image data if available. No more extra encoding process. | |
| 49 | 48 | @return The encoded data. If can't encode, return nil |
| 50 | 49 | */ |
| 51 | 50 | - (nullable NSData *)sd_imageData; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h
| ... | ... | @@ -27,7 +27,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { |
| 27 | 27 | #endif |
| 28 | 28 | |
| 29 | 29 | /** |
| 30 | - Provide some common method for `UIImage`. | |
| 30 | + Provide some commen method for `UIImage`. | |
| 31 | 31 | Image process is based on Core Graphics and vImage. |
| 32 | 32 | */ |
| 33 | 33 | @interface UIImage (Transform) | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m
| ... | ... | @@ -9,8 +9,7 @@ |
| 9 | 9 | #import "UIImage+Transform.h" |
| 10 | 10 | #import "NSImage+Compatibility.h" |
| 11 | 11 | #import "SDImageGraphics.h" |
| 12 | -#import "SDGraphicsImageRenderer.h" | |
| 13 | -#import "NSBezierPath+SDRoundedCorners.h" | |
| 12 | +#import "NSBezierPath+RoundedCorners.h" | |
| 14 | 13 | #import <Accelerate/Accelerate.h> |
| 15 | 14 | #if SD_UIKIT || SD_MAC |
| 16 | 15 | #import <CoreImage/CoreImage.h> |
| ... | ... | @@ -164,29 +163,13 @@ static inline UIColor * SDGetColorFromPixel(Pixel_8888 pixel, CGBitmapInfo bitma |
| 164 | 163 | return [UIColor colorWithRed:r green:g blue:b alpha:a]; |
| 165 | 164 | } |
| 166 | 165 | |
| 167 | -#if SD_UIKIT || SD_MAC | |
| 168 | -// Create-Rule, caller should call CGImageRelease | |
| 169 | -static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ciImage) { | |
| 170 | - CGImageRef imageRef = NULL; | |
| 171 | - if (@available(iOS 10, macOS 10.12, tvOS 10, *)) { | |
| 172 | - imageRef = ciImage.CGImage; | |
| 173 | - } | |
| 174 | - if (!imageRef) { | |
| 175 | - CIContext *context = [CIContext context]; | |
| 176 | - imageRef = [context createCGImage:ciImage fromRect:ciImage.extent]; | |
| 177 | - } else { | |
| 178 | - CGImageRetain(imageRef); | |
| 179 | - } | |
| 180 | - return imageRef; | |
| 181 | -} | |
| 182 | -#endif | |
| 183 | - | |
| 184 | 166 | @implementation UIImage (Transform) |
| 185 | 167 | |
| 186 | -- (void)sd_drawInRect:(CGRect)rect context:(CGContextRef)context scaleMode:(SDImageScaleMode)scaleMode clipsToBounds:(BOOL)clips { | |
| 168 | +- (void)sd_drawInRect:(CGRect)rect withScaleMode:(SDImageScaleMode)scaleMode clipsToBounds:(BOOL)clips { | |
| 187 | 169 | CGRect drawRect = SDCGRectFitWithScaleMode(rect, self.size, scaleMode); |
| 188 | 170 | if (drawRect.size.width == 0 || drawRect.size.height == 0) return; |
| 189 | 171 | if (clips) { |
| 172 | + CGContextRef context = SDGraphicsGetCurrentContext(); | |
| 190 | 173 | if (context) { |
| 191 | 174 | CGContextSaveGState(context); |
| 192 | 175 | CGContextAddRect(context, rect); |
| ... | ... | @@ -201,214 +184,161 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 201 | 184 | |
| 202 | 185 | - (nullable UIImage *)sd_resizedImageWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode { |
| 203 | 186 | if (size.width <= 0 || size.height <= 0) return nil; |
| 204 | - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; | |
| 205 | - format.scale = self.scale; | |
| 206 | - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:size format:format]; | |
| 207 | - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { | |
| 208 | - [self sd_drawInRect:CGRectMake(0, 0, size.width, size.height) context:context scaleMode:scaleMode clipsToBounds:NO]; | |
| 209 | - }]; | |
| 187 | + SDGraphicsBeginImageContextWithOptions(size, NO, self.scale); | |
| 188 | + [self sd_drawInRect:CGRectMake(0, 0, size.width, size.height) withScaleMode:scaleMode clipsToBounds:NO]; | |
| 189 | + UIImage *image = SDGraphicsGetImageFromCurrentImageContext(); | |
| 190 | + SDGraphicsEndImageContext(); | |
| 210 | 191 | return image; |
| 211 | 192 | } |
| 212 | 193 | |
| 213 | 194 | - (nullable UIImage *)sd_croppedImageWithRect:(CGRect)rect { |
| 195 | + if (!self.CGImage) return nil; | |
| 214 | 196 | rect.origin.x *= self.scale; |
| 215 | 197 | rect.origin.y *= self.scale; |
| 216 | 198 | rect.size.width *= self.scale; |
| 217 | 199 | rect.size.height *= self.scale; |
| 218 | 200 | if (rect.size.width <= 0 || rect.size.height <= 0) return nil; |
| 219 | - | |
| 220 | -#if SD_UIKIT || SD_MAC | |
| 221 | - // CIImage shortcut | |
| 222 | - if (self.CIImage) { | |
| 223 | - CGRect croppingRect = CGRectMake(rect.origin.x, self.size.height - CGRectGetMaxY(rect), rect.size.width, rect.size.height); | |
| 224 | - CIImage *ciImage = [self.CIImage imageByCroppingToRect:croppingRect]; | |
| 225 | -#if SD_UIKIT | |
| 226 | - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; | |
| 227 | -#else | |
| 228 | - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 229 | -#endif | |
| 230 | - return image; | |
| 231 | - } | |
| 232 | -#endif | |
| 233 | - | |
| 234 | - CGImageRef imageRef = self.CGImage; | |
| 201 | + CGImageRef imageRef = CGImageCreateWithImageInRect(self.CGImage, rect); | |
| 235 | 202 | if (!imageRef) { |
| 236 | 203 | return nil; |
| 237 | 204 | } |
| 238 | - | |
| 239 | - CGImageRef croppedImageRef = CGImageCreateWithImageInRect(imageRef, rect); | |
| 240 | - if (!croppedImageRef) { | |
| 241 | - return nil; | |
| 242 | - } | |
| 243 | 205 | #if SD_UIKIT || SD_WATCH |
| 244 | - UIImage *image = [UIImage imageWithCGImage:croppedImageRef scale:self.scale orientation:self.imageOrientation]; | |
| 206 | + UIImage *image = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation]; | |
| 245 | 207 | #else |
| 246 | - UIImage *image = [[UIImage alloc] initWithCGImage:croppedImageRef scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 208 | + UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 247 | 209 | #endif |
| 248 | - CGImageRelease(croppedImageRef); | |
| 210 | + CGImageRelease(imageRef); | |
| 249 | 211 | return image; |
| 250 | 212 | } |
| 251 | 213 | |
| 252 | 214 | - (nullable UIImage *)sd_roundedCornerImageWithRadius:(CGFloat)cornerRadius corners:(SDRectCorner)corners borderWidth:(CGFloat)borderWidth borderColor:(nullable UIColor *)borderColor { |
| 253 | - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; | |
| 254 | - format.scale = self.scale; | |
| 255 | - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:self.size format:format]; | |
| 256 | - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { | |
| 257 | - CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height); | |
| 258 | - | |
| 259 | - CGFloat minSize = MIN(self.size.width, self.size.height); | |
| 260 | - if (borderWidth < minSize / 2) { | |
| 215 | + if (!self.CGImage) return nil; | |
| 216 | + SDGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); | |
| 217 | + CGContextRef context = SDGraphicsGetCurrentContext(); | |
| 218 | + CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height); | |
| 219 | + | |
| 220 | + CGFloat minSize = MIN(self.size.width, self.size.height); | |
| 221 | + if (borderWidth < minSize / 2) { | |
| 261 | 222 | #if SD_UIKIT || SD_WATCH |
| 262 | - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadii:CGSizeMake(cornerRadius, cornerRadius)]; | |
| 223 | + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadii:CGSizeMake(cornerRadius, cornerRadius)]; | |
| 263 | 224 | #else |
| 264 | - NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadius:cornerRadius]; | |
| 225 | + NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadius:cornerRadius]; | |
| 265 | 226 | #endif |
| 266 | - [path closePath]; | |
| 267 | - | |
| 268 | - CGContextSaveGState(context); | |
| 269 | - [path addClip]; | |
| 270 | - [self drawInRect:rect]; | |
| 271 | - CGContextRestoreGState(context); | |
| 272 | - } | |
| 227 | + [path closePath]; | |
| 273 | 228 | |
| 274 | - if (borderColor && borderWidth < minSize / 2 && borderWidth > 0) { | |
| 275 | - CGFloat strokeInset = (floor(borderWidth * self.scale) + 0.5) / self.scale; | |
| 276 | - CGRect strokeRect = CGRectInset(rect, strokeInset, strokeInset); | |
| 277 | - CGFloat strokeRadius = cornerRadius > self.scale / 2 ? cornerRadius - self.scale / 2 : 0; | |
| 229 | + CGContextSaveGState(context); | |
| 230 | + [path addClip]; | |
| 231 | + [self drawInRect:rect]; | |
| 232 | + CGContextRestoreGState(context); | |
| 233 | + } | |
| 234 | + | |
| 235 | + if (borderColor && borderWidth < minSize / 2 && borderWidth > 0) { | |
| 236 | + CGFloat strokeInset = (floor(borderWidth * self.scale) + 0.5) / self.scale; | |
| 237 | + CGRect strokeRect = CGRectInset(rect, strokeInset, strokeInset); | |
| 238 | + CGFloat strokeRadius = cornerRadius > self.scale / 2 ? cornerRadius - self.scale / 2 : 0; | |
| 278 | 239 | #if SD_UIKIT || SD_WATCH |
| 279 | - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadii:CGSizeMake(strokeRadius, strokeRadius)]; | |
| 240 | + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadii:CGSizeMake(strokeRadius, strokeRadius)]; | |
| 280 | 241 | #else |
| 281 | - NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadius:strokeRadius]; | |
| 242 | + NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadius:strokeRadius]; | |
| 282 | 243 | #endif |
| 283 | - [path closePath]; | |
| 284 | - | |
| 285 | - path.lineWidth = borderWidth; | |
| 286 | - [borderColor setStroke]; | |
| 287 | - [path stroke]; | |
| 288 | - } | |
| 289 | - }]; | |
| 244 | + [path closePath]; | |
| 245 | + | |
| 246 | + path.lineWidth = borderWidth; | |
| 247 | + [borderColor setStroke]; | |
| 248 | + [path stroke]; | |
| 249 | + } | |
| 250 | + | |
| 251 | + UIImage *image = SDGraphicsGetImageFromCurrentImageContext(); | |
| 252 | + SDGraphicsEndImageContext(); | |
| 290 | 253 | return image; |
| 291 | 254 | } |
| 292 | 255 | |
| 293 | 256 | - (nullable UIImage *)sd_rotatedImageWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize { |
| 294 | - size_t width = self.size.width; | |
| 295 | - size_t height = self.size.height; | |
| 296 | - CGRect newRect = CGRectApplyAffineTransform(CGRectMake(0, 0, width, height), | |
| 257 | + if (!self.CGImage) return nil; | |
| 258 | + size_t width = (size_t)CGImageGetWidth(self.CGImage); | |
| 259 | + size_t height = (size_t)CGImageGetHeight(self.CGImage); | |
| 260 | + CGRect newRect = CGRectApplyAffineTransform(CGRectMake(0., 0., width, height), | |
| 297 | 261 | fitSize ? CGAffineTransformMakeRotation(angle) : CGAffineTransformIdentity); |
| 298 | - | |
| 299 | -#if SD_UIKIT || SD_MAC | |
| 300 | - // CIImage shortcut | |
| 301 | - if (self.CIImage) { | |
| 302 | - CIImage *ciImage = self.CIImage; | |
| 303 | - if (fitSize) { | |
| 304 | - CGAffineTransform transform = CGAffineTransformMakeRotation(angle); | |
| 305 | - ciImage = [ciImage imageByApplyingTransform:transform]; | |
| 306 | - } else { | |
| 307 | - CIFilter *filter = [CIFilter filterWithName:@"CIStraightenFilter"]; | |
| 308 | - [filter setValue:ciImage forKey:kCIInputImageKey]; | |
| 309 | - [filter setValue:@(angle) forKey:kCIInputAngleKey]; | |
| 310 | - ciImage = filter.outputImage; | |
| 311 | - } | |
| 312 | -#if SD_UIKIT || SD_WATCH | |
| 313 | - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; | |
| 314 | -#else | |
| 315 | - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 316 | -#endif | |
| 317 | - return image; | |
| 318 | - } | |
| 319 | -#endif | |
| 320 | 262 | |
| 321 | - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; | |
| 322 | - format.scale = self.scale; | |
| 323 | - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:newRect.size format:format]; | |
| 324 | - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { | |
| 325 | - CGContextSetShouldAntialias(context, true); | |
| 326 | - CGContextSetAllowsAntialiasing(context, true); | |
| 327 | - CGContextSetInterpolationQuality(context, kCGInterpolationHigh); | |
| 328 | - CGContextTranslateCTM(context, +(newRect.size.width * 0.5), +(newRect.size.height * 0.5)); | |
| 263 | + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | |
| 264 | + CGContextRef context = CGBitmapContextCreate(NULL, | |
| 265 | + (size_t)newRect.size.width, | |
| 266 | + (size_t)newRect.size.height, | |
| 267 | + 8, | |
| 268 | + (size_t)newRect.size.width * 4, | |
| 269 | + colorSpace, | |
| 270 | + kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); | |
| 271 | + CGColorSpaceRelease(colorSpace); | |
| 272 | + if (!context) return nil; | |
| 273 | + | |
| 274 | + CGContextSetShouldAntialias(context, true); | |
| 275 | + CGContextSetAllowsAntialiasing(context, true); | |
| 276 | + CGContextSetInterpolationQuality(context, kCGInterpolationHigh); | |
| 277 | + | |
| 278 | + CGContextTranslateCTM(context, +(newRect.size.width * 0.5), +(newRect.size.height * 0.5)); | |
| 279 | + CGContextRotateCTM(context, angle); | |
| 280 | + | |
| 281 | + CGContextDrawImage(context, CGRectMake(-(width * 0.5), -(height * 0.5), width, height), self.CGImage); | |
| 282 | + CGImageRef imgRef = CGBitmapContextCreateImage(context); | |
| 329 | 283 | #if SD_UIKIT || SD_WATCH |
| 330 | - // Use UIKit coordinate system counterclockwise (⟲) | |
| 331 | - CGContextRotateCTM(context, -angle); | |
| 284 | + UIImage *img = [UIImage imageWithCGImage:imgRef scale:self.scale orientation:self.imageOrientation]; | |
| 332 | 285 | #else |
| 333 | - CGContextRotateCTM(context, angle); | |
| 286 | + UIImage *img = [[UIImage alloc] initWithCGImage:imgRef scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 334 | 287 | #endif |
| 335 | - | |
| 336 | - [self drawInRect:CGRectMake(-(width * 0.5), -(height * 0.5), width, height)]; | |
| 337 | - }]; | |
| 338 | - return image; | |
| 288 | + CGImageRelease(imgRef); | |
| 289 | + CGContextRelease(context); | |
| 290 | + return img; | |
| 339 | 291 | } |
| 340 | 292 | |
| 341 | 293 | - (nullable UIImage *)sd_flippedImageWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical { |
| 342 | - size_t width = self.size.width; | |
| 343 | - size_t height = self.size.height; | |
| 344 | - | |
| 345 | -#if SD_UIKIT || SD_MAC | |
| 346 | - // CIImage shortcut | |
| 347 | - if (self.CIImage) { | |
| 348 | - CGAffineTransform transform = CGAffineTransformIdentity; | |
| 349 | - // Use UIKit coordinate system | |
| 350 | - if (horizontal) { | |
| 351 | - CGAffineTransform flipHorizontal = CGAffineTransformMake(-1, 0, 0, 1, width, 0); | |
| 352 | - transform = CGAffineTransformConcat(transform, flipHorizontal); | |
| 353 | - } | |
| 354 | - if (vertical) { | |
| 355 | - CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, height); | |
| 356 | - transform = CGAffineTransformConcat(transform, flipVertical); | |
| 357 | - } | |
| 358 | - CIImage *ciImage = [self.CIImage imageByApplyingTransform:transform]; | |
| 359 | -#if SD_UIKIT | |
| 360 | - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; | |
| 361 | -#else | |
| 362 | - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 363 | -#endif | |
| 364 | - return image; | |
| 294 | + if (!self.CGImage) return nil; | |
| 295 | + size_t width = (size_t)CGImageGetWidth(self.CGImage); | |
| 296 | + size_t height = (size_t)CGImageGetHeight(self.CGImage); | |
| 297 | + size_t bytesPerRow = width * 4; | |
| 298 | + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | |
| 299 | + CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); | |
| 300 | + CGColorSpaceRelease(colorSpace); | |
| 301 | + if (!context) return nil; | |
| 302 | + | |
| 303 | + CGContextDrawImage(context, CGRectMake(0, 0, width, height), self.CGImage); | |
| 304 | + UInt8 *data = (UInt8 *)CGBitmapContextGetData(context); | |
| 305 | + if (!data) { | |
| 306 | + CGContextRelease(context); | |
| 307 | + return nil; | |
| 365 | 308 | } |
| 309 | + vImage_Buffer src = { data, height, width, bytesPerRow }; | |
| 310 | + vImage_Buffer dest = { data, height, width, bytesPerRow }; | |
| 311 | + if (vertical) { | |
| 312 | + vImageVerticalReflect_ARGB8888(&src, &dest, kvImageBackgroundColorFill); | |
| 313 | + } | |
| 314 | + if (horizontal) { | |
| 315 | + vImageHorizontalReflect_ARGB8888(&src, &dest, kvImageBackgroundColorFill); | |
| 316 | + } | |
| 317 | + CGImageRef imgRef = CGBitmapContextCreateImage(context); | |
| 318 | + CGContextRelease(context); | |
| 319 | +#if SD_UIKIT || SD_WATCH | |
| 320 | + UIImage *img = [UIImage imageWithCGImage:imgRef scale:self.scale orientation:self.imageOrientation]; | |
| 321 | +#else | |
| 322 | + UIImage *img = [[UIImage alloc] initWithCGImage:imgRef scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 366 | 323 | #endif |
| 367 | - | |
| 368 | - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; | |
| 369 | - format.scale = self.scale; | |
| 370 | - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:self.size format:format]; | |
| 371 | - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { | |
| 372 | - // Use UIKit coordinate system | |
| 373 | - if (horizontal) { | |
| 374 | - CGAffineTransform flipHorizontal = CGAffineTransformMake(-1, 0, 0, 1, width, 0); | |
| 375 | - CGContextConcatCTM(context, flipHorizontal); | |
| 376 | - } | |
| 377 | - if (vertical) { | |
| 378 | - CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, height); | |
| 379 | - CGContextConcatCTM(context, flipVertical); | |
| 380 | - } | |
| 381 | - [self drawInRect:CGRectMake(0, 0, width, height)]; | |
| 382 | - }]; | |
| 383 | - return image; | |
| 324 | + CGImageRelease(imgRef); | |
| 325 | + return img; | |
| 384 | 326 | } |
| 385 | 327 | |
| 386 | 328 | #pragma mark - Image Blending |
| 387 | 329 | |
| 388 | 330 | - (nullable UIImage *)sd_tintedImageWithColor:(nonnull UIColor *)tintColor { |
| 331 | + if (!self.CGImage) return nil; | |
| 332 | + if (!tintColor.CGColor) return nil; | |
| 333 | + | |
| 389 | 334 | BOOL hasTint = CGColorGetAlpha(tintColor.CGColor) > __FLT_EPSILON__; |
| 390 | 335 | if (!hasTint) { |
| 391 | - return self; | |
| 392 | - } | |
| 393 | - | |
| 394 | -#if SD_UIKIT || SD_MAC | |
| 395 | - // CIImage shortcut | |
| 396 | - if (self.CIImage) { | |
| 397 | - CIImage *ciImage = self.CIImage; | |
| 398 | - CIImage *colorImage = [CIImage imageWithColor:[[CIColor alloc] initWithColor:tintColor]]; | |
| 399 | - colorImage = [colorImage imageByCroppingToRect:ciImage.extent]; | |
| 400 | - CIFilter *filter = [CIFilter filterWithName:@"CISourceAtopCompositing"]; | |
| 401 | - [filter setValue:colorImage forKey:kCIInputImageKey]; | |
| 402 | - [filter setValue:ciImage forKey:kCIInputBackgroundImageKey]; | |
| 403 | - ciImage = filter.outputImage; | |
| 404 | -#if SD_UIKIT | |
| 405 | - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; | |
| 336 | +#if SD_UIKIT || SD_WATCH | |
| 337 | + return [UIImage imageWithCGImage:self.CGImage scale:self.scale orientation:self.imageOrientation]; | |
| 406 | 338 | #else |
| 407 | - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 339 | + return [[UIImage alloc] initWithCGImage:self.CGImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 408 | 340 | #endif |
| 409 | - return image; | |
| 410 | 341 | } |
| 411 | -#endif | |
| 412 | 342 | |
| 413 | 343 | CGSize size = self.size; |
| 414 | 344 | CGRect rect = { CGPointZero, size }; |
| ... | ... | @@ -417,30 +347,23 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 417 | 347 | // blend mode, see https://en.wikipedia.org/wiki/Alpha_compositing |
| 418 | 348 | CGBlendMode blendMode = kCGBlendModeSourceAtop; |
| 419 | 349 | |
| 420 | - SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init]; | |
| 421 | - format.scale = scale; | |
| 422 | - SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:size format:format]; | |
| 423 | - UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) { | |
| 424 | - [self drawInRect:rect]; | |
| 425 | - CGContextSetBlendMode(context, blendMode); | |
| 426 | - CGContextSetFillColorWithColor(context, tintColor.CGColor); | |
| 427 | - CGContextFillRect(context, rect); | |
| 428 | - }]; | |
| 350 | + SDGraphicsBeginImageContextWithOptions(size, NO, scale); | |
| 351 | + CGContextRef context = SDGraphicsGetCurrentContext(); | |
| 352 | + [self drawInRect:rect]; | |
| 353 | + CGContextSetBlendMode(context, blendMode); | |
| 354 | + CGContextSetFillColorWithColor(context, tintColor.CGColor); | |
| 355 | + CGContextFillRect(context, rect); | |
| 356 | + UIImage *image = SDGraphicsGetImageFromCurrentImageContext(); | |
| 357 | + SDGraphicsEndImageContext(); | |
| 358 | + | |
| 429 | 359 | return image; |
| 430 | 360 | } |
| 431 | 361 | |
| 432 | 362 | - (nullable UIColor *)sd_colorAtPoint:(CGPoint)point { |
| 433 | - CGImageRef imageRef = NULL; | |
| 434 | - // CIImage compatible | |
| 435 | -#if SD_UIKIT || SD_MAC | |
| 436 | - if (self.CIImage) { | |
| 437 | - imageRef = SDCreateCGImageFromCIImage(self.CIImage); | |
| 438 | - } | |
| 439 | -#endif | |
| 440 | - if (!imageRef) { | |
| 441 | - imageRef = self.CGImage; | |
| 442 | - CGImageRetain(imageRef); | |
| 363 | + if (!self) { | |
| 364 | + return nil; | |
| 443 | 365 | } |
| 366 | + CGImageRef imageRef = self.CGImage; | |
| 444 | 367 | if (!imageRef) { |
| 445 | 368 | return nil; |
| 446 | 369 | } |
| ... | ... | @@ -449,53 +372,42 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 449 | 372 | CGFloat width = CGImageGetWidth(imageRef); |
| 450 | 373 | CGFloat height = CGImageGetHeight(imageRef); |
| 451 | 374 | if (point.x < 0 || point.y < 0 || point.x >= width || point.y >= height) { |
| 452 | - CGImageRelease(imageRef); | |
| 453 | 375 | return nil; |
| 454 | 376 | } |
| 455 | 377 | |
| 456 | 378 | // Get pixels |
| 457 | 379 | CGDataProviderRef provider = CGImageGetDataProvider(imageRef); |
| 458 | 380 | if (!provider) { |
| 459 | - CGImageRelease(imageRef); | |
| 460 | 381 | return nil; |
| 461 | 382 | } |
| 462 | 383 | CFDataRef data = CGDataProviderCopyData(provider); |
| 463 | 384 | if (!data) { |
| 464 | - CGImageRelease(imageRef); | |
| 465 | 385 | return nil; |
| 466 | 386 | } |
| 467 | 387 | |
| 468 | 388 | // Get pixel at point |
| 469 | 389 | size_t bytesPerRow = CGImageGetBytesPerRow(imageRef); |
| 470 | 390 | size_t components = CGImageGetBitsPerPixel(imageRef) / CGImageGetBitsPerComponent(imageRef); |
| 471 | - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); | |
| 472 | 391 | |
| 473 | 392 | CFRange range = CFRangeMake(bytesPerRow * point.y + components * point.x, 4); |
| 474 | 393 | if (CFDataGetLength(data) < range.location + range.length) { |
| 475 | 394 | CFRelease(data); |
| 476 | - CGImageRelease(imageRef); | |
| 477 | 395 | return nil; |
| 478 | 396 | } |
| 479 | 397 | Pixel_8888 pixel = {0}; |
| 480 | 398 | CFDataGetBytes(data, range, pixel); |
| 481 | 399 | CFRelease(data); |
| 482 | - CGImageRelease(imageRef); | |
| 400 | + | |
| 483 | 401 | // Convert to color |
| 402 | + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); | |
| 484 | 403 | return SDGetColorFromPixel(pixel, bitmapInfo); |
| 485 | 404 | } |
| 486 | 405 | |
| 487 | 406 | - (nullable NSArray<UIColor *> *)sd_colorsWithRect:(CGRect)rect { |
| 488 | - CGImageRef imageRef = NULL; | |
| 489 | - // CIImage compatible | |
| 490 | -#if SD_UIKIT || SD_MAC | |
| 491 | - if (self.CIImage) { | |
| 492 | - imageRef = SDCreateCGImageFromCIImage(self.CIImage); | |
| 493 | - } | |
| 494 | -#endif | |
| 495 | - if (!imageRef) { | |
| 496 | - imageRef = self.CGImage; | |
| 497 | - CGImageRetain(imageRef); | |
| 407 | + if (!self) { | |
| 408 | + return nil; | |
| 498 | 409 | } |
| 410 | + CGImageRef imageRef = self.CGImage; | |
| 499 | 411 | if (!imageRef) { |
| 500 | 412 | return nil; |
| 501 | 413 | } |
| ... | ... | @@ -504,19 +416,16 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 504 | 416 | CGFloat width = CGImageGetWidth(imageRef); |
| 505 | 417 | CGFloat height = CGImageGetHeight(imageRef); |
| 506 | 418 | if (CGRectGetWidth(rect) <= 0 || CGRectGetHeight(rect) <= 0 || CGRectGetMinX(rect) < 0 || CGRectGetMinY(rect) < 0 || CGRectGetMaxX(rect) > width || CGRectGetMaxY(rect) > height) { |
| 507 | - CGImageRelease(imageRef); | |
| 508 | 419 | return nil; |
| 509 | 420 | } |
| 510 | 421 | |
| 511 | 422 | // Get pixels |
| 512 | 423 | CGDataProviderRef provider = CGImageGetDataProvider(imageRef); |
| 513 | 424 | if (!provider) { |
| 514 | - CGImageRelease(imageRef); | |
| 515 | 425 | return nil; |
| 516 | 426 | } |
| 517 | 427 | CFDataRef data = CGDataProviderCopyData(provider); |
| 518 | 428 | if (!data) { |
| 519 | - CGImageRelease(imageRef); | |
| 520 | 429 | return nil; |
| 521 | 430 | } |
| 522 | 431 | |
| ... | ... | @@ -528,7 +437,6 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 528 | 437 | size_t end = bytesPerRow * (CGRectGetMaxY(rect) - 1) + components * CGRectGetMaxX(rect); |
| 529 | 438 | if (CFDataGetLength(data) < (CFIndex)end) { |
| 530 | 439 | CFRelease(data); |
| 531 | - CGImageRelease(imageRef); | |
| 532 | 440 | return nil; |
| 533 | 441 | } |
| 534 | 442 | |
| ... | ... | @@ -552,53 +460,29 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 552 | 460 | [colors addObject:color]; |
| 553 | 461 | } |
| 554 | 462 | CFRelease(data); |
| 555 | - CGImageRelease(imageRef); | |
| 556 | 463 | |
| 557 | 464 | return [colors copy]; |
| 558 | 465 | } |
| 559 | 466 | |
| 560 | 467 | #pragma mark - Image Effect |
| 561 | 468 | |
| 562 | -// We use vImage to do box convolve for performance and support for watchOS. However, you can just use `CIFilter.CIGaussianBlur`. For other blur effect, use any filter in `CICategoryBlur` | |
| 469 | +// We use vImage to do box convolve for performance and support for watchOS. However, you can just use `CIFilter.CIBoxBlur`. For other blur effect, use any filter in `CICategoryBlur` | |
| 563 | 470 | - (nullable UIImage *)sd_blurredImageWithRadius:(CGFloat)blurRadius { |
| 564 | 471 | if (self.size.width < 1 || self.size.height < 1) { |
| 565 | 472 | return nil; |
| 566 | 473 | } |
| 474 | + if (!self.CGImage) { | |
| 475 | + return nil; | |
| 476 | + } | |
| 477 | + | |
| 567 | 478 | BOOL hasBlur = blurRadius > __FLT_EPSILON__; |
| 568 | 479 | if (!hasBlur) { |
| 569 | 480 | return self; |
| 570 | 481 | } |
| 571 | 482 | |
| 572 | 483 | CGFloat scale = self.scale; |
| 573 | - CGFloat inputRadius = blurRadius * scale; | |
| 574 | -#if SD_UIKIT || SD_MAC | |
| 575 | - if (self.CIImage) { | |
| 576 | - CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"]; | |
| 577 | - [filter setValue:self.CIImage forKey:kCIInputImageKey]; | |
| 578 | - [filter setValue:@(inputRadius) forKey:kCIInputRadiusKey]; | |
| 579 | - CIImage *ciImage = filter.outputImage; | |
| 580 | - ciImage = [ciImage imageByCroppingToRect:CGRectMake(0, 0, self.size.width, self.size.height)]; | |
| 581 | -#if SD_UIKIT | |
| 582 | - UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation]; | |
| 583 | -#else | |
| 584 | - UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp]; | |
| 585 | -#endif | |
| 586 | - return image; | |
| 587 | - } | |
| 588 | -#endif | |
| 589 | - | |
| 590 | 484 | CGImageRef imageRef = self.CGImage; |
| 591 | 485 | |
| 592 | - //convert to BGRA if it isn't | |
| 593 | - if (CGImageGetBitsPerPixel(imageRef) != 32 || | |
| 594 | - CGImageGetBitsPerComponent(imageRef) != 8 || | |
| 595 | - !((CGImageGetBitmapInfo(imageRef) & kCGBitmapAlphaInfoMask))) { | |
| 596 | - SDGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); | |
| 597 | - [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; | |
| 598 | - imageRef = SDGraphicsGetImageFromCurrentImageContext().CGImage; | |
| 599 | - SDGraphicsEndImageContext(); | |
| 600 | - } | |
| 601 | - | |
| 602 | 486 | vImage_Buffer effect = {}, scratch = {}; |
| 603 | 487 | vImage_Buffer *input = NULL, *output = NULL; |
| 604 | 488 | |
| ... | ... | @@ -606,14 +490,14 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 606 | 490 | .bitsPerComponent = 8, |
| 607 | 491 | .bitsPerPixel = 32, |
| 608 | 492 | .colorSpace = NULL, |
| 609 | - .bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, //requests a BGRA buffer. | |
| 493 | + .bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little, //requests a BGRA buffer. | |
| 610 | 494 | .version = 0, |
| 611 | 495 | .decode = NULL, |
| 612 | 496 | .renderingIntent = kCGRenderingIntentDefault |
| 613 | 497 | }; |
| 614 | 498 | |
| 615 | 499 | vImage_Error err; |
| 616 | - err = vImageBuffer_InitWithCGImage(&effect, &format, NULL, imageRef, kvImageNoFlags); | |
| 500 | + err = vImageBuffer_InitWithCGImage(&effect, &format, NULL, imageRef, kvImagePrintDiagnosticsToConsole); | |
| 617 | 501 | if (err != kvImageNoError) { |
| 618 | 502 | NSLog(@"UIImage+Transform error: vImageBuffer_InitWithCGImage returned error code %zi for inputImage: %@", err, self); |
| 619 | 503 | return nil; |
| ... | ... | @@ -640,8 +524,9 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 640 | 524 | // |
| 641 | 525 | // ... if d is odd, use three box-blurs of size 'd', centered on the output pixel. |
| 642 | 526 | // |
| 527 | + CGFloat inputRadius = blurRadius * scale; | |
| 643 | 528 | if (inputRadius - 2.0 < __FLT_EPSILON__) inputRadius = 2.0; |
| 644 | - uint32_t radius = floor(inputRadius * 3.0 * sqrt(2 * M_PI) / 4 + 0.5); | |
| 529 | + uint32_t radius = floor((inputRadius * 3.0 * sqrt(2 * M_PI) / 4 + 0.5) / 2); | |
| 645 | 530 | radius |= 1; // force radius to be odd so that the three box-blur methodology works. |
| 646 | 531 | int iterations; |
| 647 | 532 | if (blurRadius * scale < 0.5) iterations = 1; |
| ... | ... | @@ -677,19 +562,12 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull |
| 677 | 562 | |
| 678 | 563 | #if SD_UIKIT || SD_MAC |
| 679 | 564 | - (nullable UIImage *)sd_filteredImageWithFilter:(nonnull CIFilter *)filter { |
| 680 | - CIImage *inputImage; | |
| 681 | - if (self.CIImage) { | |
| 682 | - inputImage = self.CIImage; | |
| 683 | - } else { | |
| 684 | - CGImageRef imageRef = self.CGImage; | |
| 685 | - if (!imageRef) { | |
| 686 | - return nil; | |
| 687 | - } | |
| 688 | - inputImage = [CIImage imageWithCGImage:imageRef]; | |
| 689 | - } | |
| 690 | - if (!inputImage) return nil; | |
| 565 | + if (!self.CGImage) return nil; | |
| 691 | 566 | |
| 692 | 567 | CIContext *context = [CIContext context]; |
| 568 | + CIImage *inputImage = [CIImage imageWithCGImage:self.CGImage]; | |
| 569 | + if (!inputImage) return nil; | |
| 570 | + | |
| 693 | 571 | [filter setValue:inputImage forKey:kCIInputImageKey]; |
| 694 | 572 | CIImage *outputImage = filter.outputImage; |
| 695 | 573 | if (!outputImage) return nil; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h
| ... | ... | @@ -32,18 +32,10 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima |
| 32 | 32 | @property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; |
| 33 | 33 | |
| 34 | 34 | /** |
| 35 | - * Get the current image operation key. Operation key is used to identify the different queries for one view instance (like UIButton). | |
| 36 | - * See more about this in `SDWebImageContextSetImageOperationKey`. | |
| 37 | - * If you cancel current image load, the key will be set to nil. | |
| 38 | - * @note You can use method `UIView+WebCacheOperation` to investigate different queries' operation. | |
| 39 | - */ | |
| 40 | -@property (nonatomic, strong, readonly, nullable) NSString *sd_latestOperationKey; | |
| 41 | - | |
| 42 | -/** | |
| 43 | 35 | * The current image loading progress associated to the view. The unit count is the received size and excepted size of download. |
| 44 | 36 | * The `totalUnitCount` and `completedUnitCount` will be reset to 0 after a new image loading start (change from current queue). And they will be set to `SDWebImageProgressUnitCountUnknown` if the progressBlock not been called but the image loading success to mark the progress finished (change from main queue). |
| 45 | - * @note You can use Key-Value Observing on the progress, but you should take care that the change to progress is from a background queue during download(the same as progressBlock). If you want to using KVO and update the UI, make sure to dispatch on the main queue. And it's recommend to use some KVO libs like KVOController because it's more safe and easy to use. | |
| 46 | - * @note The getter will create a progress instance if the value is nil. But by default, we don't create one. If you need to use Key-Value Observing, you must trigger the getter or set a custom progress instance before the loading start. The default value is nil. | |
| 37 | + * @note You can use Key-Value Observing on the progress, but you should take care that the change to progress is from a background queue during download(the same as progressBlock). If you want to using KVO and update the UI, make sure to dispatch on the main queue. And it's recommand to use some KVO libs like KVOController because it's more safe and easy to use. | |
| 38 | + * @note The getter will create a progress instance if the value is nil. But by default, we don't create one. If you need to use Key-Value Observing, you must trigger the getter or set a custom progresss instance before the loading start. The default value is nil. | |
| 47 | 39 | * @note Note that because of the limitations of categories this property can get out of sync if you update the progress directly. |
| 48 | 40 | */ |
| 49 | 41 | @property (nonatomic, strong, null_resettable) NSProgress *sd_imageProgress; |
| ... | ... | @@ -67,7 +59,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima |
| 67 | 59 | * The forth parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache |
| 68 | 60 | * or from the memory cache or from the network. |
| 69 | 61 | * |
| 70 | - * The fifth parameter normally is always YES. However, if you provide SDWebImageAvoidAutoSetImage with SDWebImageProgressiveLoad options to enable progressive downloading and set the image yourself. This block is thus called repeatedly with a partial image. When image is fully downloaded, the | |
| 62 | + * The fith parameter normally is always YES. However, if you provide SDWebImageAvoidAutoSetImage with SDWebImageProgressiveLoad options to enable progressive downloading and set the image yourself. This block is thus called repeatedly with a partial image. When image is fully downloaded, the | |
| 71 | 63 | * block is called a last time with the full image and the last parameter set to YES. |
| 72 | 64 | * |
| 73 | 65 | * The last parameter is the original image URL |
| ... | ... | @@ -91,7 +83,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima |
| 91 | 83 | |
| 92 | 84 | /** |
| 93 | 85 | The image transition when image load finished. See `SDWebImageTransition`. |
| 94 | - If you specify nil, do not do transition. Defaults to nil. | |
| 86 | + If you specify nil, do not do transition. Defautls to nil. | |
| 95 | 87 | */ |
| 96 | 88 | @property (nonatomic, strong, nullable) SDWebImageTransition *sd_imageTransition; |
| 97 | 89 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m
| ... | ... | @@ -11,7 +11,6 @@ |
| 11 | 11 | #import "UIView+WebCacheOperation.h" |
| 12 | 12 | #import "SDWebImageError.h" |
| 13 | 13 | #import "SDInternalMacros.h" |
| 14 | -#import "SDWebImageTransitionInternal.h" | |
| 15 | 14 | |
| 16 | 15 | const int64_t SDWebImageProgressUnitCountUnknown = 1LL; |
| 17 | 16 | |
| ... | ... | @@ -53,19 +52,10 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL; |
| 53 | 52 | setImageBlock:(nullable SDSetImageBlock)setImageBlock |
| 54 | 53 | progress:(nullable SDImageLoaderProgressBlock)progressBlock |
| 55 | 54 | completed:(nullable SDInternalCompletionBlock)completedBlock { |
| 56 | - if (context) { | |
| 57 | - // copy to avoid mutable object | |
| 58 | - context = [context copy]; | |
| 59 | - } else { | |
| 60 | - context = [NSDictionary dictionary]; | |
| 61 | - } | |
| 55 | + context = [context copy]; // copy to avoid mutable object | |
| 62 | 56 | NSString *validOperationKey = context[SDWebImageContextSetImageOperationKey]; |
| 63 | 57 | if (!validOperationKey) { |
| 64 | - // pass through the operation key to downstream, which can used for tracing operation or image view class | |
| 65 | 58 | validOperationKey = NSStringFromClass([self class]); |
| 66 | - SDWebImageMutableContext *mutableContext = [context mutableCopy]; | |
| 67 | - mutableContext[SDWebImageContextSetImageOperationKey] = validOperationKey; | |
| 68 | - context = [mutableContext copy]; | |
| 69 | 59 | } |
| 70 | 60 | self.sd_latestOperationKey = validOperationKey; |
| 71 | 61 | [self sd_cancelImageLoadOperationWithKey:validOperationKey]; |
| ... | ... | @@ -90,14 +80,10 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL; |
| 90 | 80 | [self sd_startImageIndicator]; |
| 91 | 81 | id<SDWebImageIndicator> imageIndicator = self.sd_imageIndicator; |
| 92 | 82 | #endif |
| 83 | + | |
| 93 | 84 | SDWebImageManager *manager = context[SDWebImageContextCustomManager]; |
| 94 | 85 | if (!manager) { |
| 95 | 86 | manager = [SDWebImageManager sharedManager]; |
| 96 | - } else { | |
| 97 | - // remove this manager to avoid retain cycle (manger -> loader -> operation -> context -> manager) | |
| 98 | - SDWebImageMutableContext *mutableContext = [context mutableCopy]; | |
| 99 | - mutableContext[SDWebImageContextCustomManager] = nil; | |
| 100 | - context = [mutableContext copy]; | |
| 101 | 87 | } |
| 102 | 88 | |
| 103 | 89 | SDImageLoaderProgressBlock combinedProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) { |
| ... | ... | @@ -203,7 +189,6 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL; |
| 203 | 189 | |
| 204 | 190 | - (void)sd_cancelCurrentImageLoad { |
| 205 | 191 | [self sd_cancelImageLoadOperationWithKey:self.sd_latestOperationKey]; |
| 206 | - self.sd_latestOperationKey = nil; | |
| 207 | 192 | } |
| 208 | 193 | |
| 209 | 194 | - (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDSetImageBlock)setImageBlock cacheType:(SDImageCacheType)cacheType imageURL:(NSURL *)imageURL { |
| ... | ... | @@ -252,38 +237,22 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL; |
| 252 | 237 | if (transition) { |
| 253 | 238 | #if SD_UIKIT |
| 254 | 239 | [UIView transitionWithView:view duration:0 options:0 animations:^{ |
| 255 | - if (!view.sd_latestOperationKey) { | |
| 256 | - return; | |
| 257 | - } | |
| 258 | 240 | // 0 duration to let UIKit render placeholder and prepares block |
| 259 | 241 | if (transition.prepares) { |
| 260 | 242 | transition.prepares(view, image, imageData, cacheType, imageURL); |
| 261 | 243 | } |
| 262 | 244 | } completion:^(BOOL finished) { |
| 263 | 245 | [UIView transitionWithView:view duration:transition.duration options:transition.animationOptions animations:^{ |
| 264 | - if (!view.sd_latestOperationKey) { | |
| 265 | - return; | |
| 266 | - } | |
| 267 | 246 | if (finalSetImageBlock && !transition.avoidAutoSetImage) { |
| 268 | 247 | finalSetImageBlock(image, imageData, cacheType, imageURL); |
| 269 | 248 | } |
| 270 | 249 | if (transition.animations) { |
| 271 | 250 | transition.animations(view, image); |
| 272 | 251 | } |
| 273 | - } completion:^(BOOL finished) { | |
| 274 | - if (!view.sd_latestOperationKey) { | |
| 275 | - return; | |
| 276 | - } | |
| 277 | - if (transition.completion) { | |
| 278 | - transition.completion(finished); | |
| 279 | - } | |
| 280 | - }]; | |
| 252 | + } completion:transition.completion]; | |
| 281 | 253 | }]; |
| 282 | 254 | #elif SD_MAC |
| 283 | 255 | [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull prepareContext) { |
| 284 | - if (!view.sd_latestOperationKey) { | |
| 285 | - return; | |
| 286 | - } | |
| 287 | 256 | // 0 duration to let AppKit render placeholder and prepares block |
| 288 | 257 | prepareContext.duration = 0; |
| 289 | 258 | if (transition.prepares) { |
| ... | ... | @@ -291,33 +260,16 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL; |
| 291 | 260 | } |
| 292 | 261 | } completionHandler:^{ |
| 293 | 262 | [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) { |
| 294 | - if (!view.sd_latestOperationKey) { | |
| 295 | - return; | |
| 296 | - } | |
| 297 | 263 | context.duration = transition.duration; |
| 298 | -#pragma clang diagnostic push | |
| 299 | -#pragma clang diagnostic ignored "-Wdeprecated-declarations" | |
| 300 | - CAMediaTimingFunction *timingFunction = transition.timingFunction; | |
| 301 | -#pragma clang diagnostic pop | |
| 302 | - if (!timingFunction) { | |
| 303 | - timingFunction = SDTimingFunctionFromAnimationOptions(transition.animationOptions); | |
| 304 | - } | |
| 305 | - context.timingFunction = timingFunction; | |
| 264 | + context.timingFunction = transition.timingFunction; | |
| 306 | 265 | context.allowsImplicitAnimation = SD_OPTIONS_CONTAINS(transition.animationOptions, SDWebImageAnimationOptionAllowsImplicitAnimation); |
| 307 | 266 | if (finalSetImageBlock && !transition.avoidAutoSetImage) { |
| 308 | 267 | finalSetImageBlock(image, imageData, cacheType, imageURL); |
| 309 | 268 | } |
| 310 | - CATransition *trans = SDTransitionFromAnimationOptions(transition.animationOptions); | |
| 311 | - if (trans) { | |
| 312 | - [view.layer addAnimation:trans forKey:kCATransition]; | |
| 313 | - } | |
| 314 | 269 | if (transition.animations) { |
| 315 | 270 | transition.animations(view, image); |
| 316 | 271 | } |
| 317 | 272 | } completionHandler:^{ |
| 318 | - if (!view.sd_latestOperationKey) { | |
| 319 | - return; | |
| 320 | - } | |
| 321 | 273 | if (transition.completion) { |
| 322 | 274 | transition.completion(YES); |
| 323 | 275 | } | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h
| ... | ... | @@ -11,7 +11,7 @@ |
| 11 | 11 | |
| 12 | 12 | /** |
| 13 | 13 | These methods are used to support canceling for UIView image loading, it's designed to be used internal but not external. |
| 14 | - All the stored operations are weak, so it will be dealloced after image loading finished. If you need to store operations, use your own class to keep a strong reference for them. | |
| 14 | + All the stored operations are weak, so it will be dalloced after image loading finished. If you need to store operations, use your own class to keep a strong reference for them. | |
| 15 | 15 | */ |
| 16 | 16 | @interface UIView (WebCacheOperation) |
| 17 | 17 | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m
| ... | ... | @@ -12,7 +12,7 @@ |
| 12 | 12 | static char loadOperationKey; |
| 13 | 13 | |
| 14 | 14 | // key is strong, value is weak because operation instance is retained by SDWebImageManager's runningOperations property |
| 15 | -// we should use lock to keep thread-safe because these method may not be accessed from main queue | |
| 15 | +// we should use lock to keep thread-safe because these method may not be acessed from main queue | |
| 16 | 16 | typedef NSMapTable<NSString *, id<SDWebImageOperation>> SDOperationsDictionary; |
| 17 | 17 | |
| 18 | 18 | @implementation UIView (WebCacheOperation) | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h
| ... | ... | @@ -11,7 +11,6 @@ |
| 11 | 11 | @class SDAsyncBlockOperation; |
| 12 | 12 | typedef void (^SDAsyncBlock)(SDAsyncBlockOperation * __nonnull asyncOperation); |
| 13 | 13 | |
| 14 | -/// A async block operation, success after you call `completer` (not like `NSBlockOperation` which is for sync block, success on return) | |
| 15 | 14 | @interface SDAsyncBlockOperation : NSOperation |
| 16 | 15 | |
| 17 | 16 | - (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m
| ... | ... | @@ -35,58 +35,33 @@ |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | - (void)start { |
| 38 | - @synchronized (self) { | |
| 39 | - if (self.isCancelled) { | |
| 40 | - self.finished = YES; | |
| 41 | - return; | |
| 42 | - } | |
| 43 | - | |
| 44 | - self.finished = NO; | |
| 45 | - self.executing = YES; | |
| 46 | - | |
| 47 | - if (self.executionBlock) { | |
| 48 | - self.executionBlock(self); | |
| 49 | - } else { | |
| 50 | - self.executing = NO; | |
| 51 | - self.finished = YES; | |
| 52 | - } | |
| 38 | + if (self.isCancelled) { | |
| 39 | + return; | |
| 40 | + } | |
| 41 | + | |
| 42 | + [self willChangeValueForKey:@"isExecuting"]; | |
| 43 | + self.executing = YES; | |
| 44 | + [self didChangeValueForKey:@"isExecuting"]; | |
| 45 | + | |
| 46 | + if (self.executionBlock) { | |
| 47 | + self.executionBlock(self); | |
| 48 | + } else { | |
| 49 | + [self complete]; | |
| 53 | 50 | } |
| 54 | 51 | } |
| 55 | 52 | |
| 56 | 53 | - (void)cancel { |
| 57 | - @synchronized (self) { | |
| 58 | - [super cancel]; | |
| 59 | - if (self.isExecuting) { | |
| 60 | - self.executing = NO; | |
| 61 | - self.finished = YES; | |
| 62 | - } | |
| 63 | - } | |
| 54 | + [super cancel]; | |
| 55 | + [self complete]; | |
| 64 | 56 | } |
| 65 | 57 | |
| 66 | - | |
| 67 | 58 | - (void)complete { |
| 68 | - @synchronized (self) { | |
| 69 | - if (self.isExecuting) { | |
| 70 | - self.finished = YES; | |
| 71 | - self.executing = NO; | |
| 72 | - } | |
| 73 | - } | |
| 74 | - } | |
| 75 | - | |
| 76 | -- (void)setFinished:(BOOL)finished { | |
| 77 | - [self willChangeValueForKey:@"isFinished"]; | |
| 78 | - _finished = finished; | |
| 79 | - [self didChangeValueForKey:@"isFinished"]; | |
| 80 | -} | |
| 81 | - | |
| 82 | -- (void)setExecuting:(BOOL)executing { | |
| 83 | 59 | [self willChangeValueForKey:@"isExecuting"]; |
| 84 | - _executing = executing; | |
| 60 | + [self willChangeValueForKey:@"isFinished"]; | |
| 61 | + self.executing = NO; | |
| 62 | + self.finished = YES; | |
| 85 | 63 | [self didChangeValueForKey:@"isExecuting"]; |
| 86 | -} | |
| 87 | - | |
| 88 | -- (BOOL)isConcurrent { | |
| 89 | - return YES; | |
| 64 | + [self didChangeValueForKey:@"isFinished"]; | |
| 90 | 65 | } |
| 91 | 66 | |
| 92 | 67 | @end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h
| ... | ... | @@ -9,8 +9,8 @@ |
| 9 | 9 | #import <Foundation/Foundation.h> |
| 10 | 10 | #import "SDWebImageCompat.h" |
| 11 | 11 | |
| 12 | -/// A Image-Asset manager to work like UIKit/AppKit's image cache behavior | |
| 13 | -/// Apple parse the Asset Catalog compiled file(`Assets.car`) by CoreUI.framework, however it's a private framework and there are no other ways to directly get the data. So we just process the normal bundle files :) | |
| 12 | +// Apple parse the Asset Catalog compiled file(`Assets.car`) by CoreUI.framework, however it's a private framework and there are no other ways to directly get the data. So we just process the normal bundle files :) | |
| 13 | + | |
| 14 | 14 | @interface SDImageAssetManager : NSObject |
| 15 | 15 | |
| 16 | 16 | @property (nonatomic, strong, nonnull) NSMapTable<NSString *, UIImage *> *imageTable; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | #import <Foundation/Foundation.h> |
| 10 | 10 | #import "SDWebImageCompat.h" |
| 11 | 11 | |
| 12 | -/// This is used for operation management, but not for operation queue execute | |
| 12 | +// This is used for operation management, but not for operation queue execute | |
| 13 | 13 | @interface SDImageCachesManagerOperation : NSOperation |
| 14 | 14 | |
| 15 | 15 | @property (nonatomic, assign, readonly) NSUInteger pendingCount; | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h
| ... | ... | @@ -13,6 +13,5 @@ |
| 13 | 13 | |
| 14 | 14 | + (NSTimeInterval)frameDurationAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source; |
| 15 | 15 | + (NSUInteger)imageLoopCountWithSource:(nonnull CGImageSourceRef)source; |
| 16 | -+ (nullable UIImage *)createFrameAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source scale:(CGFloat)scale preserveAspectRatio:(BOOL)preserveAspectRatio thumbnailSize:(CGSize)thumbnailSize options:(nullable NSDictionary *)options; | |
| 17 | 16 | |
| 18 | 17 | @end | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h
| ... | ... | @@ -21,18 +21,6 @@ |
| 21 | 21 | #define SD_OPTIONS_CONTAINS(options, value) (((options) & (value)) == (value)) |
| 22 | 22 | #endif |
| 23 | 23 | |
| 24 | -#ifndef SD_CSTRING | |
| 25 | -#define SD_CSTRING(str) #str | |
| 26 | -#endif | |
| 27 | - | |
| 28 | -#ifndef SD_NSSTRING | |
| 29 | -#define SD_NSSTRING(str) @(SD_CSTRING(str)) | |
| 30 | -#endif | |
| 31 | - | |
| 32 | -#ifndef SD_SEL_SPI | |
| 33 | -#define SD_SEL_SPI(name) NSSelectorFromString([NSString stringWithFormat:@"_%@", SD_NSSTRING(name)]) | |
| 34 | -#endif | |
| 35 | - | |
| 36 | 24 | #ifndef weakify |
| 37 | 25 | #define weakify(...) \ |
| 38 | 26 | sd_keywordify \ | ... | ... |
Example/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h
Example/Pods/SDWebImage/WebImage/SDWebImage.h
| ... | ... | @@ -9,13 +9,17 @@ |
| 9 | 9 | |
| 10 | 10 | #import <SDWebImage/SDWebImageCompat.h> |
| 11 | 11 | |
| 12 | -//! Project version number for SDWebImage. | |
| 13 | -FOUNDATION_EXPORT double SDWebImageVersionNumber; | |
| 12 | +#if SD_UIKIT | |
| 13 | +#import <UIKit/UIKit.h> | |
| 14 | +#endif | |
| 15 | + | |
| 16 | +//! Project version number for WebImage. | |
| 17 | +FOUNDATION_EXPORT double WebImageVersionNumber; | |
| 14 | 18 | |
| 15 | -//! Project version string for SDWebImage. | |
| 16 | -FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; | |
| 19 | +//! Project version string for WebImage. | |
| 20 | +FOUNDATION_EXPORT const unsigned char WebImageVersionString[]; | |
| 17 | 21 | |
| 18 | -// In this header, you should import all the public headers of your framework using statements like #import <SDWebImage/PublicHeader.h> | |
| 22 | +// In this header, you should import all the public headers of your framework using statements like #import <WebImage/PublicHeader.h> | |
| 19 | 23 | |
| 20 | 24 | #import <SDWebImage/SDWebImageManager.h> |
| 21 | 25 | #import <SDWebImage/SDWebImageCacheKeyFilter.h> |
| ... | ... | @@ -32,8 +36,6 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; |
| 32 | 36 | #import <SDWebImage/SDWebImageDownloaderConfig.h> |
| 33 | 37 | #import <SDWebImage/SDWebImageDownloaderOperation.h> |
| 34 | 38 | #import <SDWebImage/SDWebImageDownloaderRequestModifier.h> |
| 35 | -#import <SDWebImage/SDWebImageDownloaderResponseModifier.h> | |
| 36 | -#import <SDWebImage/SDWebImageDownloaderDecryptor.h> | |
| 37 | 39 | #import <SDWebImage/SDImageLoader.h> |
| 38 | 40 | #import <SDWebImage/SDImageLoadersManager.h> |
| 39 | 41 | #import <SDWebImage/UIButton+WebCache.h> |
| ... | ... | @@ -42,7 +44,6 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; |
| 42 | 44 | #import <SDWebImage/UIImage+Metadata.h> |
| 43 | 45 | #import <SDWebImage/UIImage+MultiFormat.h> |
| 44 | 46 | #import <SDWebImage/UIImage+MemoryCacheCost.h> |
| 45 | -#import <SDWebImage/UIImage+ExtendedCacheData.h> | |
| 46 | 47 | #import <SDWebImage/SDWebImageOperation.h> |
| 47 | 48 | #import <SDWebImage/SDWebImageDownloader.h> |
| 48 | 49 | #import <SDWebImage/SDWebImageTransition.h> |
| ... | ... | @@ -52,7 +53,6 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; |
| 52 | 53 | #import <SDWebImage/SDAnimatedImage.h> |
| 53 | 54 | #import <SDWebImage/SDAnimatedImageView.h> |
| 54 | 55 | #import <SDWebImage/SDAnimatedImageView+WebCache.h> |
| 55 | -#import <SDWebImage/SDAnimatedImagePlayer.h> | |
| 56 | 56 | #import <SDWebImage/SDImageCodersManager.h> |
| 57 | 57 | #import <SDWebImage/SDImageCoder.h> |
| 58 | 58 | #import <SDWebImage/SDImageAPNGCoder.h> |
| ... | ... | @@ -61,7 +61,6 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; |
| 61 | 61 | #import <SDWebImage/SDImageFrame.h> |
| 62 | 62 | #import <SDWebImage/SDImageCoderHelper.h> |
| 63 | 63 | #import <SDWebImage/SDImageGraphics.h> |
| 64 | -#import <SDWebImage/SDGraphicsImageRenderer.h> | |
| 65 | 64 | #import <SDWebImage/UIImage+GIF.h> |
| 66 | 65 | #import <SDWebImage/UIImage+ForceDecode.h> |
| 67 | 66 | #import <SDWebImage/NSData+ImageContentType.h> | ... | ... |
Example/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist
Example/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h
| ... | ... | @@ -14,12 +14,10 @@ |
| 14 | 14 | #import "NSData+ImageContentType.h" |
| 15 | 15 | #import "NSImage+Compatibility.h" |
| 16 | 16 | #import "SDAnimatedImage.h" |
| 17 | -#import "SDAnimatedImagePlayer.h" | |
| 18 | 17 | #import "SDAnimatedImageRep.h" |
| 19 | 18 | #import "SDAnimatedImageView+WebCache.h" |
| 20 | 19 | #import "SDAnimatedImageView.h" |
| 21 | 20 | #import "SDDiskCache.h" |
| 22 | -#import "SDGraphicsImageRenderer.h" | |
| 23 | 21 | #import "SDImageAPNGCoder.h" |
| 24 | 22 | #import "SDImageCache.h" |
| 25 | 23 | #import "SDImageCacheConfig.h" |
| ... | ... | @@ -44,10 +42,8 @@ |
| 44 | 42 | #import "SDWebImageDefine.h" |
| 45 | 43 | #import "SDWebImageDownloader.h" |
| 46 | 44 | #import "SDWebImageDownloaderConfig.h" |
| 47 | -#import "SDWebImageDownloaderDecryptor.h" | |
| 48 | 45 | #import "SDWebImageDownloaderOperation.h" |
| 49 | 46 | #import "SDWebImageDownloaderRequestModifier.h" |
| 50 | -#import "SDWebImageDownloaderResponseModifier.h" | |
| 51 | 47 | #import "SDWebImageError.h" |
| 52 | 48 | #import "SDWebImageIndicator.h" |
| 53 | 49 | #import "SDWebImageManager.h" |
| ... | ... | @@ -56,7 +52,6 @@ |
| 56 | 52 | #import "SDWebImagePrefetcher.h" |
| 57 | 53 | #import "SDWebImageTransition.h" |
| 58 | 54 | #import "UIButton+WebCache.h" |
| 59 | -#import "UIImage+ExtendedCacheData.h" | |
| 60 | 55 | #import "UIImage+ForceDecode.h" |
| 61 | 56 | #import "UIImage+GIF.h" |
| 62 | 57 | #import "UIImage+MemoryCacheCost.h" | ... | ... |
Example/Pods/Target Support Files/YBImageBrowser_DSCnliveShop/YBImageBrowser_DSCnliveShop-Info.plist
YBImageBrowser_DSCnliveShop.podspec
| 1 | 1 | Pod::Spec.new do |s| |
| 2 | 2 | s.name = "YBImageBrowser_DSCnliveShop" |
| 3 | - s.version = "3.1.1" | |
| 3 | + s.version = "3.1.2" | |
| 4 | 4 | s.summary = "YBImageBrowser改依赖为YYKit" |
| 5 | 5 | s.homepage = "http://bj.gitlab.cnlive.com/DSIOSTeam" |
| 6 | 6 | s.author = { "DSIOSTeam" => "694092596@qq.com" } |
| ... | ... | @@ -10,7 +10,7 @@ Pod::Spec.new do |s| |
| 10 | 10 | s.source_files = "YBImageBrowser_DSCnliveShop/Classes/**/*" |
| 11 | 11 | s.resources = "YBImageBrowser_DSCnliveShop/Assets/YBImageBrowserVideo.bundle", "YBImageBrowser_DSCnliveShop/Assets/YBImageBrowser.bundle" |
| 12 | 12 | |
| 13 | - s.dependency 'SDWebImage' | |
| 13 | + s.dependency 'SDWebImage','~>5.2.3' | |
| 14 | 14 | s.dependency 'YYKit' |
| 15 | 15 | |
| 16 | 16 | end | ... | ... |