Skip to content

Commit d547870

Browse files
authored
Merge pull request #4 from SDWebImage/feature_export_svg_data
Add support to easy export("encoding") the SVG data of `SVGKImage` presentation
2 parents 700e0e5 + f667a70 commit d547870

File tree

7 files changed

+64
-39
lines changed

7 files changed

+64
-39
lines changed

.travis.yml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
language: objective-c
2-
osx_image: xcode9.4
2+
osx_image: xcode10.2
3+
4+
addons:
5+
homebrew:
6+
packages:
7+
- carthage
8+
update: true
39

410
env:
511
global:
@@ -15,10 +21,8 @@ notifications:
1521
before_install:
1622
- env
1723
- locale
18-
- gem install cocoapods --no-rdoc --no-ri --no-document --quiet
19-
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
20-
- brew update
21-
- brew upgrade carthage
24+
- gem install cocoapods --no-document --quiet
25+
- gem install xcpretty --no-document --quiet
2226
- pod --version
2327
- pod setup --silent > /dev/null
2428
- pod repo update --silent
@@ -30,7 +34,7 @@ script:
3034
- set -o pipefail
3135

3236
- echo Check if the library described by the podspec can be built
33-
# - pod lib lint --allow-warnings
37+
- pod lib lint --allow-warnings
3438

3539
- echo Build as dynamic frameworks
3640
- carthage update --platform ios,tvos,macos --configuration DEBUG

Example/Podfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use_frameworks!
33
target 'SDWebImageSVGCoder_Example' do
44
platform :ios, '9.3'
55
pod 'SDWebImageSVGCoder', :path => '../'
6+
pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '3.x'
67

78
target 'SDWebImageSVGCoder_Tests' do
89
inherit! :search_paths

Example/Podfile.lock

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,41 @@
11
PODS:
2-
- CocoaLumberjack (3.5.2):
3-
- CocoaLumberjack/Core (= 3.5.2)
4-
- CocoaLumberjack/Core (3.5.2)
5-
- SDWebImage/Core (5.0.0)
6-
- SDWebImageSVGCoder (0.1.1):
2+
- CocoaLumberjack (3.5.3):
3+
- CocoaLumberjack/Core (= 3.5.3)
4+
- CocoaLumberjack/Core (3.5.3)
5+
- SDWebImage/Core (5.0.2)
6+
- SDWebImageSVGCoder (0.2.0):
77
- SDWebImage/Core (~> 5.0)
88
- SVGKit (>= 2.1)
99
- SVGKit (2.1.0):
1010
- CocoaLumberjack (~> 3.0)
1111

1212
DEPENDENCIES:
1313
- SDWebImageSVGCoder (from `../`)
14+
- SVGKit (from `https://github.com/SVGKit/SVGKit.git`, branch `3.x`)
1415

1516
SPEC REPOS:
1617
https://github.com/cocoapods/specs.git:
1718
- CocoaLumberjack
1819
- SDWebImage
19-
- SVGKit
2020

2121
EXTERNAL SOURCES:
2222
SDWebImageSVGCoder:
2323
:path: "../"
24+
SVGKit:
25+
:branch: 3.x
26+
:git: https://github.com/SVGKit/SVGKit.git
27+
28+
CHECKOUT OPTIONS:
29+
SVGKit:
30+
:commit: cf32da55633e370e66a7ba6e003224bd67296c16
31+
:git: https://github.com/SVGKit/SVGKit.git
2432

2533
SPEC CHECKSUMS:
26-
CocoaLumberjack: 118bf4a820efc641f79fa487b75ed928dccfae23
27-
SDWebImage: 5de80a0302de9e377e62f47d2fa1304efff0e55f
28-
SDWebImageSVGCoder: 6a369e2a2cacb24de6db073346d5076834471a55
34+
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
35+
SDWebImage: 6764b5fa0f73c203728052955dbefa2bf1f33282
36+
SDWebImageSVGCoder: 61f60a3064db079de646a34a5f5aa8d3ac258345
2937
SVGKit: 8a2fc74258bdb2abb54d3b65f3dd68b0277a9c4d
3038

31-
PODFILE CHECKSUM: 5438d217c00bb7b2da72c6e8ce8ec9db055a4cc6
39+
PODFILE CHECKSUM: 8107c7193dd0c4844a782937610f415caa6ef482
3240

3341
COCOAPODS: 1.6.1

Example/SDWebImageSVGCoder-Example-macOS/ViewController.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ - (void)viewDidLoad {
3535
[imageView1 sd_setImageWithURL:SVGURL placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
3636
if (image) {
3737
NSLog(@"SVG load success");
38+
NSData *svgData = [image sd_imageDataAsFormat:SDImageFormatSVG];
39+
NSAssert(svgData.length > 0, @"SVG Data should exist");
3840
}
3941
}];
4042
[imageView2 sd_setImageWithURL:SVGURL2 placeholderImage:nil options:SDWebImageRetryFailed context:@{SDWebImageContextSVGImageSize : @(imageView2.bounds.size)} progress:nil completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

Example/SDWebImageSVGCoder/SDViewController.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ - (void)viewDidLoad
5151
[imageView1 sd_setImageWithURL:svgURL placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
5252
if (image) {
5353
NSLog(@"SVGKLayeredImageView SVG load success");
54+
NSData *svgData = [image sd_imageDataAsFormat:SDImageFormatSVG];
55+
NSAssert(svgData.length > 0, @"SVG Data should exist");
5456
}
5557
}];
5658
[imageView2 sd_setImageWithURL:svgURL2 placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

SDWebImageSVGCoder.xcodeproj/project.pbxproj

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@
4343
/* End PBXBuildFile section */
4444

4545
/* Begin PBXFileReference section */
46-
328C14B62184C856006B0C4A /* SDWebImageSVGCoder_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSVGCoder_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
46+
328C14B62184C856006B0C4A /* SDWebImageSVGCoder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSVGCoder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
4747
328C14D02184D111006B0C4A /* SDWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDWebImage.framework; path = Carthage/Build/tvOS/SDWebImage.framework; sourceTree = "<group>"; };
4848
328C14D22184D11F006B0C4A /* SVGKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SVGKit.framework; path = Carthage/Build/tvOS/SVGKit.framework; sourceTree = "<group>"; };
4949
328C14D42184D131006B0C4A /* SVGKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SVGKit.framework; path = Carthage/Build/Mac/SVGKit.framework; sourceTree = "<group>"; };
5050
328C14D62184D13B006B0C4A /* SDWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDWebImage.framework; path = Carthage/Build/Mac/SDWebImage.framework; sourceTree = "<group>"; };
51-
32B613192170AA2900DBD6ED /* SDWebImageSVGCoder_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSVGCoder_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
51+
32B613192170AA2900DBD6ED /* SDWebImageSVGCoder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSVGCoder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5252
32B613242170AA9300DBD6ED /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Module/Info.plist; sourceTree = "<group>"; };
5353
32B613372170AB0F00DBD6ED /* SDImageSVGCoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageSVGCoder.m; sourceTree = "<group>"; };
5454
32B613392170AB0F00DBD6ED /* SVGKImageView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SVGKImageView+WebCache.h"; sourceTree = "<group>"; };
@@ -61,7 +61,7 @@
6161
32B613492170AB1600DBD6ED /* SDWebImageSVGCoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDWebImageSVGCoder.h; path = Module/SDWebImageSVGCoder.h; sourceTree = "<group>"; };
6262
32B6134C2170B16400DBD6ED /* SVGKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SVGKit.framework; path = Carthage/Build/iOS/SVGKit.framework; sourceTree = "<group>"; };
6363
32B6134E2170B17200DBD6ED /* SDWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDWebImage.framework; path = Carthage/Build/iOS/SDWebImage.framework; sourceTree = "<group>"; };
64-
32B613552170B19800DBD6ED /* SDWebImageSVGCoder_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSVGCoder_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
64+
32B613552170B19800DBD6ED /* SDWebImageSVGCoder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSVGCoder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6565
32B613572170B19800DBD6ED /* SDWebImageSVGCoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDWebImageSVGCoder.h; sourceTree = "<group>"; };
6666
32B613582170B19800DBD6ED /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
6767
/* End PBXFileReference section */
@@ -110,9 +110,9 @@
110110
32B6131A2170AA2900DBD6ED /* Products */ = {
111111
isa = PBXGroup;
112112
children = (
113-
32B613192170AA2900DBD6ED /* SDWebImageSVGCoder_iOS.framework */,
114-
32B613552170B19800DBD6ED /* SDWebImageSVGCoder_tvOS.framework */,
115-
328C14B62184C856006B0C4A /* SDWebImageSVGCoder_macOS.framework */,
113+
32B613192170AA2900DBD6ED /* SDWebImageSVGCoder.framework */,
114+
32B613552170B19800DBD6ED /* SDWebImageSVGCoder.framework */,
115+
328C14B62184C856006B0C4A /* SDWebImageSVGCoder.framework */,
116116
);
117117
name = Products;
118118
sourceTree = "<group>";
@@ -221,7 +221,7 @@
221221
);
222222
name = "SDWebImageSVGCoder macOS";
223223
productName = "SDWebImageSVGCoder-macOS";
224-
productReference = 328C14B62184C856006B0C4A /* SDWebImageSVGCoder_macOS.framework */;
224+
productReference = 328C14B62184C856006B0C4A /* SDWebImageSVGCoder.framework */;
225225
productType = "com.apple.product-type.framework";
226226
};
227227
32B613182170AA2900DBD6ED /* SDWebImageSVGCoder iOS */ = {
@@ -239,7 +239,7 @@
239239
);
240240
name = "SDWebImageSVGCoder iOS";
241241
productName = SDWebImageSVGCoder;
242-
productReference = 32B613192170AA2900DBD6ED /* SDWebImageSVGCoder_iOS.framework */;
242+
productReference = 32B613192170AA2900DBD6ED /* SDWebImageSVGCoder.framework */;
243243
productType = "com.apple.product-type.framework";
244244
};
245245
32B613542170B19800DBD6ED /* SDWebImageSVGCoder tvOS */ = {
@@ -257,7 +257,7 @@
257257
);
258258
name = "SDWebImageSVGCoder tvOS";
259259
productName = SDWebImageSVGCoder;
260-
productReference = 32B613552170B19800DBD6ED /* SDWebImageSVGCoder_tvOS.framework */;
260+
productReference = 32B613552170B19800DBD6ED /* SDWebImageSVGCoder.framework */;
261261
productType = "com.apple.product-type.framework";
262262
};
263263
/* End PBXNativeTarget section */
@@ -384,8 +384,7 @@
384384
);
385385
MACOSX_DEPLOYMENT_TARGET = 10.10;
386386
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.SDWebImageSVGCoder;
387-
PRODUCT_MODULE_NAME = SDWebImageSVGCoder;
388-
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
387+
PRODUCT_NAME = SDWebImageSVGCoder;
389388
SDKROOT = macosx;
390389
SKIP_INSTALL = YES;
391390
};
@@ -415,8 +414,7 @@
415414
);
416415
MACOSX_DEPLOYMENT_TARGET = 10.10;
417416
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.SDWebImageSVGCoder;
418-
PRODUCT_MODULE_NAME = SDWebImageSVGCoder;
419-
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
417+
PRODUCT_NAME = SDWebImageSVGCoder;
420418
SDKROOT = macosx;
421419
SKIP_INSTALL = YES;
422420
};
@@ -562,8 +560,7 @@
562560
"@loader_path/Frameworks",
563561
);
564562
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.SDWebImageSVGCoder;
565-
PRODUCT_MODULE_NAME = SDWebImageSVGCoder;
566-
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
563+
PRODUCT_NAME = SDWebImageSVGCoder;
567564
SKIP_INSTALL = YES;
568565
TARGETED_DEVICE_FAMILY = "1,2";
569566
};
@@ -591,8 +588,7 @@
591588
"@loader_path/Frameworks",
592589
);
593590
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.SDWebImageSVGCoder;
594-
PRODUCT_MODULE_NAME = SDWebImageSVGCoder;
595-
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
591+
PRODUCT_NAME = SDWebImageSVGCoder;
596592
SKIP_INSTALL = YES;
597593
TARGETED_DEVICE_FAMILY = "1,2";
598594
};
@@ -619,8 +615,7 @@
619615
"@loader_path/Frameworks",
620616
);
621617
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.SDWebImageSVGCoder;
622-
PRODUCT_MODULE_NAME = SDWebImageSVGCoder;
623-
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
618+
PRODUCT_NAME = SDWebImageSVGCoder;
624619
SDKROOT = appletvos;
625620
SKIP_INSTALL = YES;
626621
TARGETED_DEVICE_FAMILY = 3;
@@ -649,8 +644,7 @@
649644
"@loader_path/Frameworks",
650645
);
651646
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.SDWebImageSVGCoder;
652-
PRODUCT_MODULE_NAME = SDWebImageSVGCoder;
653-
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
647+
PRODUCT_NAME = SDWebImageSVGCoder;
654648
SDKROOT = appletvos;
655649
SKIP_INSTALL = YES;
656650
TARGETED_DEVICE_FAMILY = 3;

SDWebImageSVGCoder/Classes/SDImageSVGCoder.m

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77

88
#import "SDImageSVGCoder.h"
9+
#import "SDSVGImage.h"
910
#import "SDWebImageSVGCoderDefine.h"
1011
#import <SVGKit/SVGKit.h>
1112

@@ -76,11 +77,24 @@ - (UIImage *)decodedImageWithData:(NSData *)data options:(SDImageCoderOptions *)
7677
#pragma mark - Encode
7778

7879
- (BOOL)canEncodeToFormat:(SDImageFormat)format {
79-
return NO;
80+
return format == SDImageFormatSVG;
8081
}
8182

8283
- (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format options:(SDImageCoderOptions *)options {
83-
return nil;
84+
// Only support SVGKImage wrapper
85+
if (![image isKindOfClass:SDSVGImage.class]) {
86+
return nil;
87+
}
88+
SVGKImage *svgImage = ((SDSVGImage *)image).SVGImage;
89+
if (!svgImage) {
90+
return nil;
91+
}
92+
SVGKSource *source = svgImage.source;
93+
// Should be NSData type source
94+
if (![source isKindOfClass:SVGKSourceNSData.class]) {
95+
return nil;
96+
}
97+
return ((SVGKSourceNSData *)source).rawData;
8498
}
8599

86100
#pragma mark - Helper

0 commit comments

Comments
 (0)