SwiftUI App Icon Creator

Create iOS and macOS application icon in Xcode with SwiftUI

Xcode 12 and macOS 11 required


📝 How to

TL;DR: check out example project in this repository.

1️⃣ Create a new Swift Package

Define two products in your Package.swift:

  • Library that will contain your icon source code
  • Executable that you will use to export icon images

Add swiftui-app-icon-creator package as a dependency.

Your Package.swift should like this:

// swift-tools-version:5.3
import PackageDescription

let package = Package(
  name: "my-app-icon",
  platforms: [.macOS(.v11)],
  products: [
    .library(name: "MyAppIcon", targets: ["MyAppIcon"]),
    .executable(name: "export", targets: ["Export"])
  dependencies: [
    .package(url: "https://github.com/darrarski/swiftui-app-icon-creator.git", from: "1.0.0")
  targets: [
    .target(name: "MyAppIcon", dependencies: [
      .product(name: "AppIconCreator", package: "swiftui-app-icon-creator")
    .target(name: "Export", dependencies: ["MyAppIcon"])

2️⃣ Create icon view in the library taget, using SwiftUI

Just create a new SwiftUI view in the library target:

import SwiftUI

public struct MyAppIconView: View {
  public init() {}

  public var body: some View {
    // ...  

3️⃣ Use IconPreviews to live-preview your icon in Xcode

Add this code to the file which contains your icon view:

import AppIconCreator

struct MyAppIconView_Preivews: PreviewProvider {
  static var previews: some View {
      icon: MyAppIconView(),
      configs: .iOS

Make sure your have selected the build scheme connected with your library target (MyAppIcon in this example).

You should be able to live-preview the icon in Xcode previews.

You can adjust the configs parameter to specify which types of the icon you want to preview. Check out IconConfig.swift for possible options.

4️⃣ Add exporting code to the executable target

Add this code to main.swift file in your executable target:

import AppIconCreator
import MyAppIcon
import Foundation

let icon = MyAppIconView()
let configs = [IconConfig].iOS
let images = [IconImage].images(for: icon, with: configs)
let exportURL = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent("Desktop").appendingPathComponent("MyAppIcon")
images.forEach { $0.save(to: exportURL) }

You can adjust the configs variable to specify which types of the icon you want to export. Check out IconConfig.swift for possible options.

In above example the images will be exported to MyAppIcon directory on current user's desktop. Feel free to adjust the exportURL variable to your needs.

5️⃣ Run the executable from Xcode to export your icon images

Make sure you have selected the build scheme connected with your executable target (export in this example).

Images of your icon should be exported into a directory specified in exportURL variable.