Skip to content

Commit b1f1394

Browse files
authored
[BUG] Can't export images to Android. (#38)
* Fixed export images for android * Removed unused individualScales case
1 parent 4a39844 commit b1f1394

File tree

4 files changed

+21
-47
lines changed

4 files changed

+21
-47
lines changed

Sources/FigmaExport/Loaders/ImagesLoader.swift

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ final class ImagesLoader {
138138
}
139139

140140
// Group images by name
141-
let groups = Dictionary(grouping: imagesDict) { $1.name.parseNameAndIdiom().name }
141+
let groups = Dictionary(grouping: imagesDict) { $1.name.parseNameAndIdiom(platform: platform).name }
142142

143143
// Create image packs for groups
144144
let imagePacks = groups.compactMap { _, components -> ImagePack? in
145145
let packImages = components.flatMap { nodeId, component -> [Image] in
146-
let (name, idiom) = component.name.parseNameAndIdiom()
146+
let (name, idiom) = component.name.parseNameAndIdiom(platform: platform)
147147
return scales.compactMap { scale -> Image? in
148148
guard let urlString = images[scale]?[nodeId], let url = URL(string: urlString) else {
149149
return nil
@@ -173,16 +173,21 @@ final class ImagesLoader {
173173

174174
private extension String {
175175

176-
func parseNameAndIdiom() -> (name: String, idiom: String) {
177-
guard let regex = try? NSRegularExpression(pattern: "(.*)~(.*)$") else {
178-
return (self, "")
179-
}
180-
guard let match = regex.firstMatch(in: self, range: NSRange(startIndex..., in: self)),
181-
let name = Range(match.range(at: 1), in: self),
182-
let idiom = Range(match.range(at: 2), in: self) else {
176+
func parseNameAndIdiom(platform: Platform) -> (name: String, idiom: String) {
177+
switch platform {
178+
case .android:
183179
return (self, "")
180+
case .ios:
181+
guard let regex = try? NSRegularExpression(pattern: "(.*)~(.*)$") else {
182+
return (self, "")
183+
}
184+
guard let match = regex.firstMatch(in: self, range: NSRange(startIndex..., in: self)),
185+
let name = Range(match.range(at: 1), in: self),
186+
let idiom = Range(match.range(at: 2), in: self) else {
187+
return (self, "")
188+
}
189+
return (String(self[name]), String(self[idiom]))
184190
}
185-
return (String(self[name]), String(self[idiom]))
186191
}
187192

188193
}

Sources/FigmaExport/Subcommands/ExportImages.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,10 @@ extension FigmaExportCommand {
225225
logger.info("Downloading remote files...")
226226
let remoteFiles = images.flatMap { asset -> [FileContents] in
227227
var result = [FileContents]()
228-
if case ImagePack.individualScales(let images) = asset.light {
228+
if case ImagePack.images(let images) = asset.light {
229229
result.append(contentsOf: makeRemoteFiles(images: images, dark: false, outputDirectory: tempDirectoryURL))
230230
}
231-
if let darkImages = asset.dark, case ImagePack.individualScales(let images) = darkImages {
231+
if let darkImages = asset.dark, case ImagePack.images(let images) = darkImages {
232232
result.append(contentsOf: makeRemoteFiles(images: images, dark: true, outputDirectory: tempDirectoryURL))
233233
}
234234
return result
@@ -284,11 +284,10 @@ extension FigmaExportCommand {
284284
/// - images: Dictionary of images. Key = scale, value = image info
285285
/// - dark: Dark mode?
286286
/// - outputDirectory: URL of the output directory
287-
private func makeRemoteFiles(images: [Double: Image], dark: Bool, outputDirectory: URL) -> [FileContents] {
288-
var result: [FileContents] = []
289-
for scale in images.keys {
290-
guard let image = images[scale] else { continue }
287+
private func makeRemoteFiles(images: [Image], dark: Bool, outputDirectory: URL) -> [FileContents] {
288+
images.map { image -> FileContents in
291289
let fileURL = URL(string: "\(image.name).\(image.format)")!
290+
let scale = image.scale
292291
let dest = Destination(
293292
directory: outputDirectory
294293
.appendingPathComponent(dark ? "dark" : "light")
@@ -297,9 +296,8 @@ extension FigmaExportCommand {
297296
var file = FileContents(destination: dest, sourceURL: image.url)
298297
file.scale = scale
299298
file.dark = dark
300-
result.append(file)
299+
return file
301300
}
302-
return result
303301
}
304302
}
305303
}

Sources/FigmaExportCore/Image.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,12 @@ public enum ImagePack: Asset {
3535
public typealias Scale = Double
3636

3737
case singleScale(Image)
38-
case individualScales([Scale: Image])
3938
case images([Image])
4039

4140
public var single: Image {
4241
switch self {
4342
case .singleScale(let image):
4443
return image
45-
case .individualScales:
46-
fatalError("Unable to extract image from image pack")
4744
case .images:
4845
fatalError("Unable to extract image from image pack")
4946
}
@@ -54,8 +51,6 @@ public enum ImagePack: Asset {
5451
switch self {
5552
case .singleScale(let image):
5653
return image.name
57-
case .individualScales(let images):
58-
return images.first!.value.name
5954
case .images(let images):
6055
return images.first!.name
6156
}
@@ -65,11 +60,6 @@ public enum ImagePack: Asset {
6560
case .singleScale(var image):
6661
image.name = newValue
6762
self = .singleScale(image)
68-
case .individualScales(var images):
69-
for key in images.keys {
70-
images[key]?.name = newValue
71-
}
72-
self = .individualScales(images)
7363
case .images(let images):
7464
let image = images.map { image -> Image in
7565
var newImage = image
@@ -85,8 +75,6 @@ public enum ImagePack: Asset {
8575
switch self {
8676
case .singleScale(let image):
8777
return image.platform
88-
case .individualScales(let images):
89-
return images.first?.value.platform
9078
case .images(let images):
9179
return images.first?.platform
9280
}

Sources/XcodeExport/XcodeImagesExporter.swift

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ final public class XcodeImagesExporter: XcodeImagesExporterBase {
8989
switch pack {
9090
case .singleScale(let image):
9191
return [saveImage(image, to: directory, dark: dark)]
92-
case .individualScales(let images):
93-
return images.map { scale, image -> FileContents in
94-
saveImage(image, to: directory, scale: scale, dark: dark)
95-
}
9692
case .images(let images):
9793
return images.map { saveImage($0, to: directory, scale: $0.scale, dark: dark) }
9894
}
@@ -125,10 +121,6 @@ final public class XcodeImagesExporter: XcodeImagesExporterBase {
125121
switch pack {
126122
case .singleScale(let image):
127123
return [imageDataForImage(image, dark: dark)]
128-
case .individualScales(let images):
129-
return images.map { scale, image -> XcodeAssetContents.ImageData in
130-
imageDataForImage(image, scale: scale, dark: dark)
131-
}
132124
case .images(let images):
133125
return images.map { imageDataForImage($0, scale: $0.scale, dark: dark) }
134126
}
@@ -188,15 +180,6 @@ private extension ImagePack {
188180
return nil
189181
}
190182
return self
191-
case .individualScales(let images):
192-
let validImages = images.reduce(into: [Scale: Image]()) { result, info in
193-
let (scale, image) = info
194-
guard image.isValidForXcode(scale: scale) else {
195-
return
196-
}
197-
result[scale] = image
198-
}
199-
return .individualScales(validImages)
200183
case .images(let images):
201184
return .images(images.filter { $0.isValidForXcode(scale: $0.scale) })
202185
}

0 commit comments

Comments
 (0)