{"id":19233729,"url":"https://github.com/brightdigit/speculid","last_synced_at":"2025-10-04T23:28:25.830Z","repository":{"id":24782242,"uuid":"28195827","full_name":"brightdigit/Speculid","owner":"brightdigit","description":"Easily Manage Graphics in Xcode Projects","archived":false,"fork":false,"pushed_at":"2025-03-11T01:40:24.000Z","size":68284,"stargazers_count":118,"open_issues_count":19,"forks_count":6,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-29T18:06:43.918Z","etag":null,"topics":["asset-management","bundle","graphics","graphics-library","icons","shell","swift","xcode"],"latest_commit_sha":null,"homepage":"https://speculid.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brightdigit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-12-18T18:22:27.000Z","updated_at":"2024-10-08T13:18:17.000Z","dependencies_parsed_at":"2025-03-14T18:15:56.971Z","dependency_job_id":"b6958bb0-e29e-48c3-a42a-f5d0a036035b","html_url":"https://github.com/brightdigit/Speculid","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brightdigit%2FSpeculid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brightdigit%2FSpeculid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brightdigit%2FSpeculid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brightdigit%2FSpeculid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brightdigit","download_url":"https://codeload.github.com/brightdigit/Speculid/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247386262,"owners_count":20930619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asset-management","bundle","graphics","graphics-library","icons","shell","swift","xcode"],"created_at":"2024-11-09T16:11:40.497Z","updated_at":"2025-10-04T23:28:20.787Z","avatar_url":"https://github.com/brightdigit.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n\u003c!--ts--\u003e\n   * [Introduction](#introduction)\n      * [Challenges Managing Graphic Assets](#challenges-managing-graphic-assets)\n         * [\u003ca href=\"https://camo.githubusercontent.com/5dd7caafd8ae359f85705403ace571735caf980c/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f6d656368616e69632e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/5dd7caafd8ae359f85705403ace571735caf980c/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f6d656368616e69632e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/mechanic.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Manually Create Multiple Sizes](#-manually-create-multiple-sizes)\n         * [\u003ca href=\"https://camo.githubusercontent.com/508ccc55cbff013ae8658a4129a187b2d9ef850a/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f617263686976652e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/508ccc55cbff013ae8658a4129a187b2d9ef850a/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f617263686976652e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/archive.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Store Generated Image Files](#-store-generated-image-files)\n         * [What If You Had...](#what-if-you-had)\n            * [Care-Free Graphic Management Where...](#care-free-graphic-management-where)\n      * [What Speculid Does](#what-speculid-does)\n         * [\u003ca href=\"https://camo.githubusercontent.com/4f78f8aad8e564f2d18fec26b56eb5704e19111b/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f6d616368696e6572792e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/4f78f8aad8e564f2d18fec26b56eb5704e19111b/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f6d616368696e6572792e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/machinery.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Automate the process](#-automate-the-process)\n         * [\u003ca href=\"https://camo.githubusercontent.com/29334f2cc761c3891de4cd5e6865b09c64d26c05/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f636c65616e2d636f64652e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/29334f2cc761c3891de4cd5e6865b09c64d26c05/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f636c65616e2d636f64652e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/clean-code.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Tidy Your Repo](#-tidy-your-repo)\n         * [Features](#features)\n            * [Input File Types Supported](#input-file-types-supported)\n            * [Modifiers](#modifiers)\n            * [Output File Types Supported](#output-file-types-supported)\n   * [Download](#download)\n      * [Email Signup](#email-signup)\n      * [Homebrew](#homebrew)\n      * [Github Releases](#github-releases)\n   * [Installation](#installation)\n      * [Fastlane Integration](#fastlane-integration)\n   * [Usage](#usage)\n      * [File Format and Properties](#file-format-and-properties)\n         * [Set](#set)\n         * [Source](#source)\n         * [Geometry \u003cem\u003eoptional\u003c/em\u003e](#geometry-optional)\n         * [Background \u003cem\u003eoptional\u003c/em\u003e](#background-optional)\n         * [Remove Alpha \u003cem\u003eoptional\u003c/em\u003e](#remove-alpha-optional)\n      * [Exporting SVGs for Speculid](#exporting-svgs-for-speculid)\n         * [\u003ca href=\"https://camo.githubusercontent.com/c4927857dc237bf89384c088d756947123fc99ac/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f7376672d6578706f72742f736b657463682f6c6f676f2e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/c4927857dc237bf89384c088d756947123fc99ac/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f7376672d6578706f72742f736b657463682f6c6f676f2e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/svg-export/sketch/logo.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Sketch](#-sketch)\n         * [\u003ca href=\"https://camo.githubusercontent.com/9d31aa3af7de5ff522c42117c2a5b6bd631ed636/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f7376672d6578706f72742f70686f746f73686f702f6c6f676f2e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9d31aa3af7de5ff522c42117c2a5b6bd631ed636/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f7376672d6578706f72742f70686f746f73686f702f6c6f676f2e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/svg-export/photoshop/logo.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Photoshop](#-photoshop)\n         * [\u003ca href=\"https://camo.githubusercontent.com/b12eea760a21557d856ae2c3a0dcfc65070fe560/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f7376672d6578706f72742f696c6c7573747261746f722f6c6f676f2e737667\" target=\"_blank\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/b12eea760a21557d856ae2c3a0dcfc65070fe560/68747470733a2f2f72617763646e2e6769746861636b2e636f6d2f62726967687464696769742f53706563756c69642f6d61737465722f696d616765732f7376672d6578706f72742f696c6c7573747261746f722f6c6f676f2e737667\" height=\"25pt\" data-canonical-src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/svg-export/illustrator/logo.svg\" style=\"max-width:100\\x;\"\u003e\u003c/a\u003e Illustrator](#-illustrator)\n      * [Xcode Integration and Automation](#xcode-integration-and-automation)\n\n\u003c!-- Added by: leo, at: Thu Sep 26 10:46:47 EDT 2019 --\u003e\n\n\u003c!--te--\u003e\n\n# Introduction\n\n## Challenges Managing Graphic Assets\n\nPart of the process of building an app for **watchOS**, **iOS**, or **macOS** is including all the image assets and app icons  in your application. Each image assets or app icons requires **several copies for different resolutions, different devices, and different sizes.** Right now, this needs to be done by exporting all the various similar images from a major graphics application. \n\nThat means developers need to:\n\n\u003csection class=\"cards\" markdown=\"1\"\u003e\n\n\u003csection class=\"card half\" markdown=\"1\"\u003e\n\n\n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/mechanic.svg\" height=\"25pt\"/\u003e Manually Create Multiple Sizes\n\nEach graphic must be **manually converted and resized several times for each update**.\n\n\u003c/section\u003e\n\u003csection class=\"card half\" markdown=\"1\"\u003e\n\n\n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/archive.svg\" height=\"25pt\"/\u003e Store Generated Image Files\n\nAn asset catalog image set will need a 1x, 2x, 3x of each graphic and **App Icons may need as many 30 different sizes**.\n\n\u003c/section\u003e\n\u003c/section\u003e\n\n### What If You Had...\n\n\u003csection class=\"cards\" markdown=\"1\"\u003e\n\n\u003csection class=\"card whole\" markdown=\"1\"\u003e\n\n\n\n\n\n\n\n\n\u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/emoji.svg\" height=\"100px\"/\u003e\u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/emoji.svg\" height=\"75px\"/\u003e\u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/emoji.svg\" height=\"50px\"/\u003e\u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/emoji.svg\" height=\"25px\"/\u003e\u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/emoji.svg\" height=\"12px\"/\u003e\u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/emoji.svg\" height=\"6px\"/\u003e\n\n#### Care-Free Graphic Management Where...\n\n* **Only one file is needed** _for each Image Set and App Icon._\n* **Graphic Designers need only export a single file change** _each time rather than as many as serveral scaled copies._\n* **Resizing and conversion is done behind the scenes** _based on a single source image._\n\n\u003c/section\u003e\n\u003c/section\u003e\n\n## What Speculid Does\n\n![Speculid In Use](https://rawcdn.githack.com/brightdigit/Speculid/master/images/Speculid-In-Use.gif)\n\n**Speculid** links a single graphic file to an Image Set or App Icon and automatically renders different resolutions, file types, and sizes for all the image specifications required.\n\n![diagram](https://rawcdn.githack.com/brightdigit/Speculid/master/images/Diagram.png)\n\n\u003csection class=\"cards\" markdown=\"1\"\u003e\n\u003csection class=\"card half\" markdown=\"1\"\u003e\n\n\n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/machinery.svg\" height=\"25pt\"/\u003e Automate the process \n\nSpeculid automates the process so **only one graphic file is needed**. Add Speculid to your build process and now the **conversions and resizing are automated** as part of the build process. Now there is no need for anyone to manually create each size for each device every time.\n\n\u003c/section\u003e\n\u003csection class=\"card half\" markdown=\"1\"\u003e\n\n\n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/clean-code.svg\" height=\"25pt\"/\u003e Tidy Your Repo\n\n**Reduce the size of your repository** by including a single vector or raster image and ignore all your automated png and pdf files at compile. That means **faster remote pulls, less redundancy, and complete syncronization between sizes.**\n\n\u003c/section\u003e\n\u003c/section\u003e\n\n### Features\n\nThis means **Speculid** can...\n\n* **take multiple input file types including SVG vector files** and raster PNG files\n* **automatically create each necessary resized raster file**\n* **remove transparencies from PNG and SVG file** for App Icons\n* **export to PDF for vector images in Image Sets** as well as PNG\n\n#### Input File Types Supported \n\n* **SVG** - Scalable Vector Graphics\n* **PNG** - Portable Network Graphics\n\n#### Modifiers \n\n* [Adding Background Colors](#background-optional-background)\n* [Transparency Removal](#remove-alpha-optional--remove-alpha)\n\n#### Output File Types Supported \n\n* **PNG** - Portable Network Graphics  \n* **PDF** - Portable Document Format \n\n# Download\n\nThere are 3 ways to download Speculid: Email Signup, Homebrew, and Github Releases:\n\n## Email Signup\n\nEmail signup allows for you to get delivered updates to your email box of new features and updates...\n\n\u003csection class=\"signup-form-container\"\u003e\n  \u003cdiv\u003e\u003cstrong\u003eSign up below\u003c/strong\u003e to get the latest version.\u003c/div\u003e\n\u003cform action=\"//brightdigit.us12.list-manage.com/subscribe/post-json?u=cb3bba007ed171091f55c47f0\u0026amp;id=19a8f55024\" class=\"signup-form\" method=\"post\"\u003e\n  \u003cdiv class=\"row\"\u003e\n  \u003cinput type=\"email\" placeholder=\"Your Email Address\" value=\"\" name=\"EMAIL\" id=\"mce-EMAIL\" required\u003e\n  \u003cinput type=\"submit\" value=\"Sign Up\"\u003e\n  \u003c/div\u003e\n\u003c/form\u003e\n\u003cdiv class=\"message\"\u003e\n  \u0026nbsp;\n\u003c/div\u003e\n\u003c/section\u003e\n\n\u003cdiv class=\"readme-only\" markdown=\"1\"\u003e\nTo download \u003cstrong\u003eSpeculid\u003c/strong\u003e, enter your email address \u003ca href=\"https://speculid.com#download\"\u003ehere\u003c/a\u003e to request access to the latest version.\n\u003c/div\u003e\n\n## Homebrew\n\nIf you are already using [Homebrew](https://brew.sh), installing via the homebrew command allows for easy installation as well as staying up-to-date on new releases. To install, type:\n\n```bash\nbrew cask install brightdigit/speculid/speculid\n```\n\nThis will automatically install the terminal command for easy scripting.\n\n## Github Releases\n\nYou can directly download the application from the Github Repo releases page.\n\n\u003ca href=\"{{ site.github.zip_url }}\" class=\"btn\"\u003eDownload .zip\u003c/a\u003e\n\u003ca href=\"{{ site.github.tar_url }}\" class=\"btn\"\u003eDownload .tar.gz\u003c/a\u003e\n\n\n\n\n# Installation\n\nOnce you have downloaded the zip file (i.e *Not Homebrew*), go ahead and **copy the application *Speculid.App* to the Applications folder**.\n\nA command line tool is included in the application bundle. Copy the command line tool to your /bin/ folder:\n\n```base\n$ sudo cp /Applications/Speculid.app/Contents/SharedSupport/speculid /usr/local/bin\n```\n\n## Fastlane Integration\n\nOnce you have the application installed, if you are using [Fastlane](https://fastlane.tools), you can integrate with your actions, by adding the plugin after installation:\n\n```bash\nfastlane add_plugin speculid\n```\n\nThen in your `Fastfile` add `speculid` to your action:\n\n```ruby\ndefault_platform(:ios)\n\nplatform :ios do\n  desc \"Application Build\"\n  lane :build do\n    ...\n    speculid\n    ...\n  end\nend\n```\n\n# Usage\n\n\u003ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Mn4pknYqzH0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" style=\"display: block; margin: auto;\" allowfullscreen\u003e\u003c/iframe\u003e\n\nSpeculid only supports being called through a command line terminal for now. Once you have copied the command to your */usr/local/bin* folder you should be able to access it easily.\n\n```bash\n$ speculid --process \u003cfile\u003e\n$ speculid --help\n$ speculid --version\n\nOptions:\n  --help     Show this screen.\n  --version  Show version.\n```\n\n## File Format and Properties\n\nThe `.speculid` file is a `json` file with the image set or app icon path, the graphic file source, and optionally basic image geometry (width or height). All paths specified in the json file could be relative to the `.speculid` file `Assets.xcassets/Raster Image.imageset` or an absolute path `/Users/leo/Documents/Projects/Speculid/examples/Assets/Assets.xcassets/Raster Image.imageset`.\n\nHere are some examples of a `.speculid` file:\n\n```json\n{\n  \"set\" : \"Assets.xcassets/Raster Image.imageset\",\n  \"source\" : \"layers.png\",\n  \"geometry\" : \"128\"\n}\n```\nor\n```json\n{\n  \"set\" : \"Assets.xcassets/iOS AppIcon.appiconset\",\n  \"source\" : \"geometry.svg\",\n  \"background\" : \"#FFFFFFFF\",\n  \"remove-alpha\" : true\n}\n```\n\n### Set \n`set`\n\n![Image Set Examples from Xcode](https://rawcdn.githack.com/brightdigit/Speculid/master/images/SetExample.png)\n\nSet is the path to the Image Set or App Icon folder used by Xcode. For more information on Image Sets, App Icons, and Asset Catalogs, check out [this article here](https://learningswift.brightdigit.com/asset-catalogs-image-sets-app-icons/).\n\n### Source \n`source`\n\nThe path to the image source file. This can be either a SVG or PNG file.\n\n### Geometry *optional* \n`geometry`\n\nThe destination geometry of image if needed (i.e. image set). It must be in the format of:\n\n* *width* (ex. \"128\") - for specifying the width of the destination image\n* x*height* (ex. \"x128\") - for specifying the height of the destination image\n\nYou can only specify the height or the width. The other dimension is automatically calculated based on the aspect ratio of the image.\n\n### Background *optional* \n`background`\n\n**App Icons are required to exclude any alpha channels**. In order to remove a transparency from a source PNG or SVG file, you can specify to remove the alpha channel and add a background color. \n\nThe background color can be set in a standard rgb, rgba, or hex code format (#RRGGBB or #AARRGGBB). If no alpha is specified an alpha of 1.0 is assumed.\n\n### Remove Alpha *optional*  \n`remove-alpha`\n\nTo specifically remove the alpha channel, a true boolean value must be specified. This will remove the alpha channel from the file. Make sure to specify an opaque background color when removing the alpha channel.\n\n## Exporting SVGs for Speculid\n\n\u003cdiv id=\"exporting-svgs-section\" markdown=\"1\"\u003e\n\n\u003cheader markdown=\"1\"\u003e\n \n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/svg-export/sketch/logo.svg\" height=\"25pt\"/\u003e Sketch \n\u003c/header\u003e\n\n![Sketch iOS App Icon Template Window][sketch-step-1]\n1. Open **Sketch** and create a new document using the **iOS App Icon** Template. If you are using an existing project, you can skip to step 3.\n\n    ![Sketch Slice Panel][sketch-step-2]\n2. Once you are in the template, duplicate one of the icon size slices on the left side.\n\n    ![Sketch Present Format][sketch-step-3]\n3. On the right size, change the **preset format** to **SVG**.\n\n    ![Sketch Export Menu][sketch-step-4]\n4. In the top menu, select **File** \u003e **Export**. \n\n    ![Sketch Export Window][sketch-step-5]\n5. Select your duplicated slice and select **Export**.\n\n6. Select the destination for your **SVG file** and **Save**.\n\n\n\u003cheader markdown=\"1\"\u003e\n\n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/svg-export/photoshop/logo.svg\" height=\"25pt\"/\u003e Photoshop\n\u003c/header\u003e\n\n![Photoshop Export Menu][photoshop-step-1]\n1. Open your **Photoshop** document and select **File** \u003e **Export** \u003e **Export As...**.\n\n    ![Photoshop Export Format][photoshop-step-2]\n2. Under the **File Settings** on the right, change the format to **SVG**.\n\n    ![Photoshop Save Dialog][photoshop-step-3]\n3. Select **Export All** and choose the destination for your **SVG file** and **Save**.\n\n\u003cheader markdown=\"1\"\u003e\n\n\n### \u003cimg class=\"readme-only\" src=\"https://rawcdn.githack.com/brightdigit/Speculid/master/images/svg-export/illustrator/logo.svg\" height=\"25pt\"/\u003e Illustrator\n\u003c/header\u003e\n\n![Illustrator Export Menu][illustrator-step-1]\n1. Open your **Illustrator** document, select **File**...**Export**...**Export for Screens...**.\n\n    ![Illustrator Export Format][illustrator-step-2]\n2. Under **Formats**, update the format to **SVG**.\n\n3. Select **Export Artboard** and choose the destination for your **SVG file** and **Save**.\n\n\u003c/div\u003e\n\n## Xcode Integration and Automation\n\nWith **Speculid**, the process of building image assets can be automated in **Xcode**. Here is how to setup your project the first time:\n\n1. **Create the speculid file** and add it to your project folder, along with your source graphic files.\n\n    ![Xcode Target Membership](https://rawcdn.githack.com/brightdigit/Speculid/master/images/XcodeTargetMembership.png)\n\n    * *Note: you don't need to add these files to any target membership*\n\n2. In the speculid file, **Add the property for the source** - the path to the SVG or PNG file.\n  ```json\n  {\n    \"source\" : \"geometry.svg\",\n    ...\n  }\n  ```\n3. In the speculid file, **Add the property for the set** - the path to the Image Set or App Icon folder.\n  ```json\n  {\n    \"set\" : \"Assets.xcassets/iOS AppIcon.appiconset\",\n    ...\n  }\n  ```\n4. *optional* In the speculid file, **Add the property for the geometry** - if this a conversion from a vector graphic (SVG) to an Image Set, you may want to supply the *1x* size.\n  ```json\n  {\n    \"set\" : \"Assets.xcassets/Raster Image.imageset\",\n    \"source\" : \"layers.png\",\n    \"geometry\" : \"128\"\n  }\n  ```\n\n    If you specify *128* in the *geometry* property, that means the width for the *1x* image will be *128 pixels*, the width for the *2x* image will be *256 pixels*, and the width for the *3x* image will be *384 pixels*. Heights will be calculated based on the aspect ratio of the SVG file.\n\n    Vector images in an image set will be converted to a iOS compatible PDF file.\n        \n5. *optional* In the speculid file, **Add the properties for the background color and alpha removal** - if this a conversion to an App Icon, you should remove any background transparency and add a background color.\n  ```json\n  {\n    \"set\" : \"Assets.xcassets/iOS AppIcon.appiconset\",\n    \"source\" : \"geometry.svg\",\n    \"background\" : \"#FFFFFFFF\",\n    \"remove-alpha\" : true\n  }\n  ```\n\n    See the [file format section](#file-format-and-properties) for more details.\n\n2. **Add the *Run Script* Build Phase** to the top of your project with the following code:\n\n    ```bash\n    find \"${SRCROOT}\" -name \"*.speculid\" -print0 |\n    while IFS= read -r -d $'\\0' line; do\n    speculid --process \"$line\" \u0026\n    done\n    wait\n    ```\n    ![Xcode Build Phase Run Script](https://rawcdn.githack.com/brightdigit/Speculid/master/images/XcodeBuildPhaseRunScript.jpg)\n\n    If you are using [fastlane](https://fastlane.tools) to build your application. You can [use the plugin to build every `.speculid` file in your directory](\\#fastlane-integration).\n\n3. **Build the application.** This will create the graphics which you will use in your asset image set or app icon.\n\n    ![Xcode Unorganized Assets](https://rawcdn.githack.com/brightdigit/Speculid/master/images/XcodeUnorganizedAssets.png)\n\n    If the asset catalog does not already have file names for each image in the asset, Speculid will automatically update the asset catalog and name the files using the following pattern:\n\n    *(source file base name)*.*(size)*@*(scale)*~*(idiom)*.(extension)\n\n    **Examples**\n\n    * **logo.20x20@1x~ipad.png** - 20x20 size 1x scale for iPad\n    * **logo.60x60@3x~iphone.png** - 60x60 size 3x scale for iPhone\n    * **logo.83.5x83.5@2x~ipad.png** - 83.5x83.5 size 2x scale for iPad\n\n5. **Enjoy!**\n\n-----\n\n**Speculid** ©2018, BrightDigit, LLC. \n\n[sketch-step-1]:       /images/svg-export/sketch/step-1.jpg \"Sketch iOS App Icon Template Window\"\n[sketch-step-2]:       /images/svg-export/sketch/step-2.jpg \"Sketch Slice Panel\"\n[sketch-step-3]:       /images/svg-export/sketch/step-3.jpg \"Sketch Present Format\"\n[sketch-step-4]:       /images/svg-export/sketch/step-4.jpg \"Sketch Export Menu\"\n[sketch-step-5]:       /images/svg-export/sketch/step-5.jpg \"Sketch Export Window\"\n[photoshop-step-1]:    /images/svg-export/photoshop/step-1.jpg \"Photoshop Export Menu\"\n[photoshop-step-2]:    /images/svg-export/photoshop/step-2.jpg \"Photoshop Export Format\"\n[photoshop-step-3]:    /images/svg-export/photoshop/step-3.jpg \"Photoshop Save Dialog\"\n[illustrator-step-1]:  /images/svg-export/illustrator/step-1.jpg \"Illustrator Export Menu\"\n[illustrator-step-2]:  /images/svg-export/illustrator/step-2.jpg \"Illustrator Export Format\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrightdigit%2Fspeculid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrightdigit%2Fspeculid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrightdigit%2Fspeculid/lists"}