diff --git a/README.md b/README.md
index 3aedada..cb01b97 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,6 @@
-# Factorio on iPhone
+

+
+Factorio on iPhone
Play your own copy of **Factorio** on your iPhone. You build the app on your Mac from the
Factorio you already own on Steam, and install it on your phone with a cable.
@@ -130,6 +132,9 @@ git pull
- [docs/research/](docs/research/static-translation.md): earlier research (ARM64 → WASM
translation).
+**Logo:** `assets/logo.png` (transparent, 683 px) and `assets/logo-256.png` are the project's own
+artwork, also used for the app icon. They are not Factorio's official logo.
+
**Third-party software:** [Wuffs](https://github.com/google/wuffs) (Apache-2.0) is downloaded
during the build to decode PNG images. Factorio itself uses [SDL](https://github.com/libsdl-org/SDL)
(zlib). Factorio is a trademark of Wube Software Ltd.; all game code and assets belong to them.
diff --git a/assets/logo-256.png b/assets/logo-256.png
new file mode 100644
index 0000000..76e31c4
Binary files /dev/null and b/assets/logo-256.png differ
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644
index 0000000..f0dc181
Binary files /dev/null and b/assets/logo.png differ
diff --git a/docs/building.md b/docs/building.md
index 7a23e35..1dfa5ff 100644
--- a/docs/building.md
+++ b/docs/building.md
@@ -66,7 +66,7 @@ only.
2. **Retarget.** `tools/retarget.py` writes `build/native/Factorio.dylib`, changing only Mach-O
header bytes, and records the changes in `build/native/retarget.json`.
3. **Shims and host.** The shim libraries and the small host executable are compiled for iOS
- with clang; the app icon is generated from the game's own icon.
+ with clang; the app icon is generated from `assets/logo.png`.
4. **Bundle and sign.** `build/native/Factorio.app` is assembled, signed, and installed with
`devicectl`.
5. **Data.** `--push-data` copies the game's `data/` folder (~1.5 GB) into the app's
diff --git a/tools/build_native.py b/tools/build_native.py
index dff66e5..90d0aed 100644
--- a/tools/build_native.py
+++ b/tools/build_native.py
@@ -96,14 +96,14 @@ def dylib(name, sources, defines=(), reexport=None, link_appkit=True, extra=()):
def build_icon():
- """Compile an asset catalog with the app icon, made from the game's own icon; returns plist keys."""
+ """Compile an asset catalog with the app icon, made from assets/logo.png; returns plist keys."""
work = OUT / "icon"
iconset = work / "Assets.xcassets/AppIcon.appiconset"
iconset.mkdir(parents=True, exist_ok=True)
tool = work / "make_icon"
run(["xcrun", "clang", "-O2", "-fobjc-arc", ROOT / "tools/make_icon.m", "-framework", "Foundation",
"-framework", "CoreGraphics", "-framework", "ImageIO", "-o", tool])
- run([tool, GAME / "data/core/graphics/factorio-icon@2x.png", iconset / "AppIcon-1024.png"])
+ run([tool, ROOT / "assets/logo.png", iconset / "AppIcon-1024.png"])
(iconset / "Contents.json").write_text(json.dumps({"images": [{"filename": "AppIcon-1024.png", "idiom": "universal",
"platform": "ios", "size": "1024x1024"}], "info": {"author": "xcode", "version": 1}}))
(work / "Assets.xcassets/Contents.json").write_text(json.dumps({"info": {"author": "xcode", "version": 1}}))
diff --git a/tools/make_icon.m b/tools/make_icon.m
index caed2e5..3ef51da 100644
--- a/tools/make_icon.m
+++ b/tools/make_icon.m
@@ -1,6 +1,6 @@
-// Builds the 1024x1024 iOS app icon from the game's own 128 px icon (read from the local install).
-// The gear is scaled with high-quality interpolation onto an opaque dark background
-// (iOS app icons must be opaque).
+// Builds the 1024x1024 iOS app icon from the project logo (assets/logo.png, transparent).
+// The emblem is drawn with high-quality interpolation onto an opaque, full-bleed dark background:
+// iOS app icons must be opaque and square (the system applies the rounded mask).
// Usage: make_icon SOURCE_PNG OUTPUT_PNG
#import
#import
@@ -21,7 +21,7 @@ int main(int argc, char **argv) {
CGContextDrawRadialGradient(ctx, gradient, CGPointMake(size / 2.0, size * 0.55), 0,
CGPointMake(size / 2.0, size / 2.0), size * 0.75, kCGGradientDrawsAfterEndLocation);
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
- CGFloat inset = size * 0.12;
+ CGFloat inset = size * 0.14; // keep the emblem clear of the mask's corners
CGContextDrawImage(ctx, CGRectMake(inset, inset, size - 2 * inset, size - 2 * inset), gear);
CGImageRef icon = CGBitmapContextCreateImage(ctx);
CGImageDestinationRef dst = CGImageDestinationCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:@(argv[2])],