1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# XcodeGen spec → Mobiler.xcodeproj (project-as-code, so the build is scriptable
# and reproducible — no hand-edited .pbxproj). `build-ios.sh` runs `xcodegen
# generate` then `xcodebuild`.
#
# VERIFY-ON-MAC: the fiddly part is linking the Rust static lib + its uniffi FFI
# (the modulemap / header / search paths). The settings below are the standard
# Crux-iOS shape; expect to adjust paths on the first MacinCloud build.
name:
options:
bundleIdPrefix:
deploymentTarget:
iOS: "16.0"
packages:
# The facet-generated ABI types (Widget/Action/Effect/...), emitted by
# `codegen --language swift` into generated/SharedTypes.
SharedTypes:
path: generated/SharedTypes
targets:
:
type: application
platform: iOS
sources:
- Sources # App.swift, Core.swift, Render.swift
- generated/shared.swift # uniffi Swift wrapper (generated)
dependencies:
- package: SharedTypes
info:
path: Sources/Info.plist
# xcodegen regenerates this plist from these properties on every build, so
# launch-screen / orientation keys MUST live here — not just in the committed
# Info.plist (which gets overwritten). Without UILaunchScreen iOS runs the app
# letterboxed (black bars top/bottom) instead of full screen.
properties:
PRODUCT_BUNDLE_IDENTIFIER:
UILaunchScreen:
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER:
SWIFT_VERSION: "5.9"
# Link the Rust staticlib (built by build-ios.sh into generated/lib/).
LIBRARY_SEARCH_PATHS:
OTHER_LDFLAGS:
# uniffi FFI modulemap so `shared.swift` finds the C symbols.
SWIFT_INCLUDE_PATHS:
# Simulator-only for now; no code signing needed.
CODE_SIGNING_ALLOWED: "NO"